在NVIDIA的2.x的架構中,每個經紗的存儲器有64KB即通過 默認劃分成共享存儲器的48KB和16KB L1高速緩存的
計算能力2.x設備具有64 KB每流式多處理器(SM)的SRAM,可以作爲beconfigured
- 16 KB L1和48 KB共享存儲器,或
- 48 KB L1和16KB共享存儲器。
(服務全局和恆定內存)。
將負載和存儲到全局存儲器,本地存儲器和表面存儲器通過L1。對常量內存的訪問通過專用常量高速緩存進行。
我們都知道訪問共享內存庫衝突 - 在 內存被分爲32組大小的32位,以允許所有32個線程同時 獨立訪問。另一方面,儘管內存速度較慢,但不會經歷存儲體衝突,因爲 內存請求會在整個warp內合併。
通過L1對全局或本地內存的訪問按每個緩存行(128 B)完成。當向L1發出加載請求時,LSU需要執行地址分歧計算以確定哪些線程正在訪問相同的高速緩存行。 LSU單元然後必須執行L1高速緩存標記查找。如果該行被高速緩存,那麼它被寫回寄存器文件;否則,該請求被髮送到L2。如果warp具有未被請求服務的線程,則請求重播並且用剩餘的線程重新發布該操作。
warp中的多個線程可以訪問緩存行中的相同字節而不會導致衝突。
問題:假設來自全局或常量內存的某些數據在給定warp的L1緩存中被緩存爲 。
常量內存不在L1中進行高速緩存,而是緩存在常量高速緩存中。
是訪問該數據受到銀行的衝突,如共享內存 (因爲L1緩存和hared記憶其實都是同一 硬件),或者是銀行無衝突的方式全球/常量 內存是?
L1和恆定緩存一次訪問單個緩存行,所以沒有銀行衝突。