【问题标题】:OpenCL global memory vs. image memory performance differences on Nvidia and AMDNvidia 和 AMD 上的 OpenCL 全局内存与图像内存性能差异
【发布时间】:2013-03-10 12:27:09
【问题描述】:

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 总线移动数据时。

【问题讨论】:

    标签: opencl


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我的问题是,为什么 Nvidia 在全局内存方面似乎比 AMD 快得多。上一代 Fermi GTX 580 的速度几乎是最新一代 Radeon 7970 的两倍! Nvidia 上的全局内存访问速度是否更快?只要我不需要读写,我可以使用图像缓冲区吗?我的意思是,如果我正在处理与图像无关的数据,但我只需要写应该/可以使用图像缓冲区吗?
    • 您可以检查一下,在 Nvidia 和 AMD 中访问全局内存所需的 GPU 周期是多少。是的,只要您不需要读写,您就可以使用图像缓冲区。当然,您可以使用图像缓冲区。每个像素可以有四个通道(RGB),一次获取图像缓冲区会为您提供四个值,因此速度要快得多。您不会像在 OpenGL 中那样仅对图像缓冲区中的图像进行限制。如果您仍然有疑问,我可以在回家后提供一个示例,以便更好地理解。
    • 好的,谢谢您的信息。我没有将图像缓冲区用于非图像数据。据我了解,图像缓冲区的优点之一是它们被缓存。常量内存也会被缓存,但要小得多。
    • @raxman 是的图像缓冲区的优点是它们被缓存,并且比全局内存更好的性能。但只能是只读或只写。所以你需要根据需求来使用它们。
    • 在这种情况下,应该避免使用全局内存,除非同时需要读/写。图像缓冲区和其他设备(如 CPU)上的全局内存之间有什么联系?在 CPU 上使用图像缓冲区的速度与全局内存相同。有重复的代码会很不方便。一个
    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    相关资源
    最近更新 更多