天天看點

CUDA實踐指南(十五)

分段通路:

如上所示,在順序通路未對齊的情況下,計算能力2.x裝置的高速緩存有助于實作合理的性能。 然而,它可能與非機關跨步通路有所不同,并且這是處理多元資料或矩陣時經常發生的模式。 出于這個原因,確定所擷取的每個緩存行中的資料盡可能多地被實際使用,這是這些裝置上的存儲器通路的性能優化的重要部分。

為了說明跨接通路對有效帶寬的影響,請參閱核心中的核心strideCopy(),以說明非單元跨度資料副本,該資料副本用從idata到odata的線程之間的跨步元素跨度複制資料。

用于說明非機關步幅資料複制的核心:

圖7說明了這種情況; 在這種情況下,warp中的線程通路記憶體中的字,步長為2.此操作導緻Tesla M2090上每個warp的兩個L1高速緩存行(或非高速緩存模式下的八個L2高速緩存段)(計算能力2.0)

CUDA實踐指南(十五)

由于事務中的一半元素沒有被使用并且代表浪費的帶寬,是以2的跨度導緻50%的加載/存儲效率。 如圖8所示,随着步幅的增加,有效帶寬會減少,直到在32個線程中加載了32行高速緩存為止。

CUDA實踐指南(十五)

如圖8所示,應盡可能避免非機關跨度全局記憶體通路。 一種方法是利用共享記憶體,這将在下一節讨論。

共享記憶體:

由于它是片上的,是以共享記憶體比本地和全局記憶體具有更高的帶寬和更低的延遲 - 前提是線程之間不存在組間沖突,如下節所述:

共享記憶體和記憶體組:

為了實作并發通路的高記憶體帶寬,共享記憶體被分成可以同時通路的大小相同的記憶體子產品(庫)。是以,跨越n個不同存儲體的n個位址的任何存儲器加載或存儲可以被同時服務,産生的有效帶寬是單個存儲體帶寬的n倍。

但是,如果一個記憶體請求的多個位址映射到同一個記憶體組,則通路将被序列化。硬體将存在bank沖突的記憶體請求拆分為許多單獨的無沖突請求,并将有效帶寬減少一個等于單獨記憶體請求數量的因子。這裡的一個例外是warp中的多個線程尋址相同的共享記憶體位置,導緻廣播。計算能力2.x及更高版本的裝置具有多點傳播共享存儲器通路的附加能力(即,将相同值的副本發送到warp的多個線程)。

為了最大限度地減少銀行沖突,了解記憶體位址如何映射到記憶體條以及如何最優地排程記憶體請求非常重要。

計算能力2.x:

在計算能力2.x的裝置上,每個存儲體每兩個時鐘周期的帶寬為32位,連續的32位字被配置設定給連續的存儲體。 warp的大小是32個線程,bank的數量也是32個,是以在warp中的任何線程之間都會發生bank沖突。

計算能力3.x:

在計算能力3.x的裝置上,每個存儲體在每個時鐘周期(*)中具有64位的帶寬。 有兩種不同的銀行模式:将連續的32位字(32位模式)或連續的64位字(64位模式)配置設定給連續的存儲單元。 warp的大小是32個線程,bank的數量也是32個,是以在warp中的任何線程之間都會發生bank沖突。

繼續閱讀