2012-07-02 95 views
3

我知道GPU上的共享內存不會在不同的內核中持續存在。但是,L1緩存是否會在不同的內核調用中持續存在?跨CUDA內核的L1高速緩存持久性

+0

一篇研究論文評估了在二級緩存中使數據持久存在的問題:http://dl.acm.org/citation.cfm?id=2159443該功能不在現有的GPU中。 – Heatsink

回答

6

SM L1高速緩存在相同流或空流的所有操作之間無效,以確保一致性。但它並不重要,因爲GPU上的L1緩存並非真正用於改善給定執行線程中的時間局部性。在大規模並行處理器上,重要的是並行空間局部性。這意味着你希望彼此執行的線程能夠訪問彼此相鄰的數據。

執行緩存的內存加載時,會執行單個warp,並且緩存會存儲由該warp中的線程訪問的緩存線(理想情況下只有一行)。如果下一個warp訪問相同的高速緩存行,則高速緩存將命中並且等待時間將減少。否則,緩存將使用不同的緩存行進行更新。如果內存訪問非常分散,那麼稍後的變形可能會在重新使用之前從早期的變形中逐出緩存行。

到另一個內核運行時,高速緩存中的數據不可能有效,因爲許多warps可能已經由該SM針對以前的內核運行,所以它是否真的無關緊要仍然存在。

+0

感謝您的迴應。有沒有辦法確定緩存是否在不同的內核調用中失效?我正在尋找空間和時間局部性:) – gmemon

+0

SM L1高速緩存在相同流或空流的所有操作之間無效以保證一致性。 –

+0

上面用Greg的陳述取代了我的「我認爲」。 – harrism