2013-10-28 46 views
10

在引用的局部性方面,L2高速緩存如何在Kepler體系結構的GPU中工作?例如,如果一個線程訪問全局內存中的地址,假設該地址的值不在L2緩存中,該值如何被緩存?它是暫時的嗎?或者該地址的其他附近值是否也被帶到L2緩存(空間)?開普勒L2高速緩存

下面的圖片來自NVIDIA白皮書。

Picture is from NVIDIA whitepaper

+1

L2高速緩存用計算能力2.0以及更高引入,並繼續在開普勒架構的支持。所使用的緩存策略是LRU(最近最少使用),其主要目的是避免全局內存帶寬瓶頸。我從「Cuda應用程序設計和開發」一書中讀到了這個。不知道這是否回答你的問題。 –

+3

L1高速緩存具有128字節的高速緩存行大小。 L2高速緩存具有32字節的高速緩存行大小。所以L2未命中會觸發一個32字節的負載。普通的全球負荷通常不會使用L1。 –

回答

10

統一L2高速緩存用計算能力2.0以及更高引入,並繼續在開普勒架構的支持。所使用的緩存策略是LRU(最近最少使用),其主要目的是避免全局內存帶寬瓶頸。 GPU應用程序可以展示兩種類型的地點(時間和空間)。

無論何時嘗試讀取特定的內存,如果找不到,它將在緩存L1和L2中查找,然後它將從緩存行加載128字節。這是默認模式。下圖也可以理解128位訪問模式爲什麼會給出好的結果。

enter image description here

+2

以上帖子的第一段回答了問題。關於這個答案的第二段,我認爲只有當(在默認模式下)器件架構是費米時纔是如此。正如@Robert Crovella在評論中提到的那樣,在開普勒一個L2高速緩存未命中導致32字節的負載。另外,我認爲該圖是誤導性的。當線程數量較少時SM不足,全局內存請求可能會使全局內存帶寬飽和。當SM變得更多/完全被更多線程佔用時,即使使用4字節負載,全局內存帶寬也可能飽和。 – Farzad