Nvidia和AMD的OpenCL全局内存与图像内存性能差异

时间:2013-03-10 12:27:09

标签: opencl

OpenCL基准网站http://www.clbenchmark.com/具有

的基准
Image Filter: Separable Gaussian Blur - Global Memory Usage and
Image Filter: Separable Gaussian Blur - Image Memory Usage

Nvidia在全球内存使用方面占据主导地位。例如,GTX 580的速度几乎是HD 7970的两倍。这是Nvidia仍然领先的少数几个基准测试之一。有人可以解释为什么会这样吗?

我问的原因是我在GTX 590上写了一个光线跟踪器,运行速度非常快。从大多数评论来看,我预计我的光线追踪器在HD 7970上的运行速度要快四倍。但实际上它运行速度要快四倍!我不明白为什么。我不使用Image Buffers。我将像素写入全局内存。当我分析内核时间时,我发现HD 7950内核时间慢了四倍,所以我知道问题出在内核端,而不是在PCI总线上移动数据时。

1 个答案:

答案 0 :(得分:4)

全局内存是设备内存,使用全局内存的数据缓冲区具有可读写的优点。它们很慢,即访问数据缓冲区会消耗更多的gpu周期。

另一方面纹理内存或你的意思是图像内存比全局内存更快,它们使用更少的gpu周期。但它们只能是只读或只能写。

如果您想要只读或只写,您可以使用图像缓冲区,它们更快。但如果您需要读写缓冲区,则必须使用数据缓冲区(全局内存)。

还有一点要注意的是,如果缓冲区声明为RGBA,则任何读取到图像缓冲区都可以一次获取4个数据。如果使用float4,也可以在数据缓冲区中使用此优势。由于gpu可以在一次获取中访问4个浮点值(这会提高性能)。

始终尽量少用作全局内存(请参阅NVIDIA或AMD手册以了解每次内存访问的确切周期数)。 如果您想要更多的理解,请告诉我:))