CUDA:什么是散写?

sho*_*osh 8 cuda

CUDA SDK中的各种CUDA演示指的是"分散写入".什么是分散的写作,为什么这么好?与它的立场形成鲜明对比?

Bah*_*bar 5

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

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

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


Ade*_*ler 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上获得良好性能的关键之一是利用内存局部性.通过写入全局内存来过度使用分散的写入很可能会影响您的性能.