根據"CUDA C Programming Guide",只有在多處理器常量高速緩存命中的情況下,常量內存訪問纔會有所收益(第5.3.2.4節)。否則,與整合全局存儲器讀取的情況相比,可能會有更多的半內存請求。那麼爲什麼常量內存大小限制爲64 KB?爲什麼CUDA中的恆定內存大小受到限制?
還有一個問題,以免問兩次。據我瞭解,在費米架構中,紋理緩存與L2緩存相結合。紋理的使用仍然有意義或全局內存讀取以相同的方式緩存?
常量內存(節5.3.2.4)
恆定存儲器空間駐留在設備存儲器,並且在第F.3.1和F.提到的常數的高速緩存被緩存4.1。
對於計算能力1.x的設備,對於一個warp的恆定內存請求首先被分成兩個請求,每個half-warp一個,分別發出。
然後,請求被分割爲多個獨立的請求,因爲初始請求中存在不同的內存地址,吞吐量減少了一個等於單獨請求數量的因子。
然後,以高速緩存命中情況下的常量高速緩存的吞吐量或其他情況下的設備內存吞吐量來處理結果請求。
格雷格,我很抱歉可能不夠清楚。我知道如何使用常量內存。在這個問題中,我想知道爲什麼只有緩存8 KB才能提供比全局內存更好的性能,爲什麼常量內存的大小限制爲64 KB。以同樣的方式可以通過L1緩存訪問全局內存。因此,從編程人員的角度來看,使用全局內存或常量內存之間的區別是什麼,因爲它們都以相同的方式被緩存? – AdelNick 2012-04-22 16:14:33
常量緩存的大小適合圖形和計算着色器。 CUDA API公開了常量緩存,以便開發人員可以利用額外的緩存。當所有線程訪問相同的地址時,常量緩存具有最佳性能。點擊速度非常快。錯過可以有一個L1錯過的相同表現。常量緩存可用於減少L1的抖動。計算能力1.x設備沒有L1或L2緩存,因此常量緩存用於優化某些訪問。 – 2012-04-22 19:57:02