8

CUDA SDK 中的各种 CUDA demo 均指“分散写入”。这是什么零散的文字,为什么这么棒?与之形成对比的是什么?

4

2 回答 2

5

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

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

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

于 2009-10-18T19:36:33.983 回答
5

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

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

从 CUDA 常见问题解答:

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

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

于 2009-10-19T17:05:59.800 回答