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



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

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

Nvidia complete在全局内存使用上占主导地位。例如,GTX 580的速度几乎是HD 7970的两倍。这是英伟达仍然领先的少数几个基准之一。有人能解释一下这是为什么吗?

我问的原因是我在我的GTX 590上写了一个运行速度非常快的光线追踪器。从大多数评论来看,我预计我的光线追踪器在HD 7970上的运行速度会快四倍。然而,它实际上运行速度慢了四倍!我不明白为什么。我不使用图像缓冲。我把像素写到全局内存中。当我配置内核时间时,我看到HD 7950内核时间慢了四倍,所以我知道问题是在内核端,而不是在跨PCI总线移动数据时。

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

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

如果你有一个情况,你想只读或只写,你可以使用图像缓冲区,他们更快。但是如果你需要读写缓冲区,你必须使用数据缓冲区(全局内存)。

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

始终尝试尽可能少地使用全局内存(请参阅NVIDIA或AMD手册以了解每次内存访问的确切周期数)。如果你想了解更多,请告诉我:)

最新更新