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手册以了解每次内存访问的确切周期数)。如果你想了解更多,请告诉我:)