2009-10-18 36 views

回答

5

我打算在這裏使用CUDA的術語。

scattered write表示您正在從每個cuda線程寫入任意地址(例如,您的warp線程不會寫入連續內存中,例如)。它與2d相關的幀緩衝區寫入形成對比,並且可以由硬件合併。在不久之前,這些是唯一可用於GPU的寫入。

它們是gather read的相反操作,它從分散的位置讀取數據,並在收集的數據上以SIMD方式執行的線程變形之前收集所有數據。但是,通過任意紋理提取,GPU集合讀取早已在GPU上可用。

5

分散寫入很棒,因爲它允許您寫入任何內存地址。在給定着色器程序可以寫入的存儲器地址中,先前的着色器通常受到限制。

「儘管圖形API中的片段程序僅限於在預先指定的位置輸出32個浮點數(RGBA * 8個渲染目標),但CUDA支持分散寫入 - 即無限數量的存儲到任何地址。那是不可能的算法使用圖形API來高效地進行使用CUDA」

從CUDA FAQ:

http://forums.nvidia.com/index.php?s=fd8a3833d78a50e273c5c731476eed0d&showtopic=84440&pid=478583&start=0&#entry478583

基本上,它讓CUDA程序更容易編寫,因爲他們沒有在那裏爲他們的限制可以寫結果。請記住,在GPU上獲得良好性能的關鍵之一是利用內存局部性。通過大量寫入全局內存過度使用分散的寫入很可能會影響您的性能。

+0

這仍然發生在「設備內存」上,對嗎? (而不是I/O分散/聚集操作,這將允許DMA引擎將來自不同主存儲器位置的內容驅動到例如單個I/O條帶中) – PypeBros 2014-01-17 10:01:59

+0

正確。這是指GPU上的內存,而不是全局內存。 – 2014-01-17 17:53:16