2013-02-21 77 views
1

在NVIDIA的2.x架構上,每個warp有64kb的內存,默認分區爲48kb的共享內存和16kb的L1緩存(服務於globalconstant內存)。一級緩存CUDA銀行衝突?

我們都知道訪問共享內存的銀行衝突 - 內存被分成32個大小爲32位的銀行,以允許所有32個線程同時獨立訪問。另一方面,全局內存雖然慢得多,但不會經歷存儲體衝突,因爲內存請求會在整個warp中進行合併。

問題:假設來自全局或常量內存的某些數據緩存在L1緩存中,用於給定warp。對共享內存(因爲L1緩存和共享內存實際上是相同的硬件)是否存在銀行衝突的數據訪問權限,還是以全局/常量內存的方式沒有銀行衝突?

回答

7

在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和恆定緩存一次訪問單個緩存行,所以沒有銀行衝突。