2017-02-09 54 views
0

我對於FP64數據如何影響由warp發出的內存訪問有點困惑。CUDA聯合訪問FP64數據

  • 一個warp總是由32個線程組成,無論這些線程在做FP32或FP64計算。對?
  • 我已經讀過,每次warp中的線程試圖讀取/寫入全局內存時,warp訪問128個字節(32個單精度浮點數)。對?
  • 所以如果一個warp中的所有線程都從內存中讀取不同的單精度浮點數(總共128個字節),但是以合併的方式,warp將發出單個內存事務。對?

這是我現在的問題:

  • 如果在經所有線程試圖在聚結的方式來訪問不同的雙精度浮點(共256個字節)?這個warp會發出兩個內存事務(128 + 128)嗎?

PS:我在計算能力最感興趣的2.0+結構

回答

1

一經總是由32個線程不管這些線程是 做FP32或FP64計算。對?

正確

我已讀取的每個在經一個線程試圖讀/寫 全局存儲器一次,經紗128個訪問字節(32個單精度浮點數 )。對?

不完全是。還有32字節的事務大小。

因此,如果在經所有線程都從存儲器而是在聚結 方式讀取不同的單精度浮 (總共128個字節)中,經紗會發出單個存儲器事務。對?

正確

如果在經所有線程試圖在聚結的方式來訪問不同 雙精度浮點(共256個字節)? 扭曲會發出兩個內存事務(128 + 128)嗎?

是的。編譯器將發出一個64位的加載指令,當兩個128字節的事務每個warp時可以進行內存訪問。

+0

感謝您的回答我的朋友。我願意接受它,但如果您能評論32字節的交易,我也將不勝感激。它們在什麼情況下發生?先謝謝你。 – AstrOne

+0

@AstrOne:如果warp中的每個線程都需要加載8或16位類型,則可以使用32字節的事務來處理這些類型。如果您願意,您也可以強制編譯器發出32字節的事務。 – talonmies