如何从全局内存"stream"数据或将数据全局内存?



codeproject.com展示第2部分:OpenCL™ –内存空间表示Global memory should be considered as streaming memory[…]和that the best performance will be achieved when streaming contiguous memory addresses or memory access patterns that can exploit the full bandwidth of the memory subsystem.

我对这句话的理解是,为了获得最佳性能,在GPU处理内核时,应该不断填充和读取全局内存。但我不知道我将如何实现这样一个概念,我也无法在我读过的(相当简单的)例子和教程中认识到它。

你知道一个好的例子吗?或者可以链接到一个

额外的问题:这在CUDA框架中是类似的吗?

我同意talonmies对该准则的解释:顺序内存访问最快。很明显(对于任何一个支持OpenCL的开发人员来说),顺序内存访问是最快的,所以NVidia明确地把它写出来很有趣。

你的解释虽然不是该文件所说的,但也是正确的。如果你的算法允许,最好异步上传大小合理的块,这样它就可以更快地在计算上开始,将计算与DMA传输重叠到系统RAM。

具有多个波前/扭曲也很有帮助,因此设备可以将它们交错以隐藏内存延迟。好的GPU经过了大量优化,能够以极快的速度进行切换,从而在内存阻塞时保持忙碌。

我对这句话的理解是,为了获得最佳性能应不断填充和读取全局GPU在内核

这不是一个正确的解释。

典型的OpenCL设备(即GPU)具有极高的带宽、高延迟的全局存储系统。这种类型的存储器系统被高度优化用于访问连续或线性存储器访问。你引用的那篇文章实际上是在说,OpenCL内核应该被设计为以一种对GPU内存最有利的连续方式访问全局内存。NVIDIA将这种优化的连续内存访问称为"联合",并在其CUDA和OpenCL指南中详细讨论了硬件的内存访问模式优化。

最新更新