2

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 上的运行速度会快四倍。然而,它实际上运行速度慢了四倍!我不明白为什么。我不使用图像缓冲区。我将像素写到全局内存中。当我分析内核时间时,我发现 HD 7950 内核时间慢了四倍,所以我知道问题出在内核方面,而不是在通过 PCI 总线移动数据时。

4

1 回答 1

4

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

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

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

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

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

于 2013-03-11T09:28:34.203 回答