2009-10-18 71 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