CUDA:什么是散写?

时间:2009-10-18 19:12:07

标签: cuda

CUDA SDK中的各种CUDA演示都是指“分散写入”。什么是分散的写作,为什么这么好?与它的立场相反?

2 个答案:

答案 0 :(得分:5)

我将在这里使用CUDA的术语。

scattered write表示您正在从每个cuda线程写入任意地址(即,warp的线程不会写入连续的内存,例如)。它与帧缓冲写入形成对比,帧写缓冲区写入是2d相干的,并且可以由硬件合并。直到不久之前,这些是GPU可用的唯一写入。

它们是gather read的相反操作,它从分散的位置读取数据,并在以收集的数据以SIMD方式执行的线程的扭曲之前收集所有这些数据。但是,通过任意纹理提取,GPU上很久就可以进行聚集读取。

答案 1 :(得分:5)

分散写入很棒,因为它允许您写入任何内存地址。以前的着色器强制通常限制在给定着色器程序可以写入的内存地址中。

“虽然图形API中的片段程序仅限于在预先指定的位置输出32个浮点数(RGBA * 8渲染目标),但CUDA支持分散写入 - 即任意地址的存储数量不限。这可以实现许多新算法使用图形APIS无法使用CUDA高效执行“

来自CUDA FAQ:

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

基本上它使CUDA程序更容易编写,因为它们不受写入结果的限制。请记住,在GPU上获得良好性能的关键之一是利用内存局部性。通过写入全局内存过度使用分散的写入很可能会影响您的性能。