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

OpenCL全局内存与Nvidia和AMD上的图像内存性能差异,opencl,Opencl,OpenCL基准测试站点提供了 Image Filter: Separable Gaussian Blur - Global Memory Usage and Image Filter: Separable Gaussian Blur - Image Memory Usage Nvidia complete在全局内存使用方面占据主导地位。例如,GTX 580的速度几乎是HD 7970的两倍。这是Nvidia仍然领先的少数几个基准之一。有人能解释为什么会这样吗 我问的原因是我在GTX 590上写

OpenCL基准测试站点提供了

Image Filter: Separable Gaussian Blur - Global Memory Usage and
Image Filter: Separable Gaussian Blur - Image Memory Usage
Nvidia complete在全局内存使用方面占据主导地位。例如,GTX 580的速度几乎是HD 7970的两倍。这是Nvidia仍然领先的少数几个基准之一。有人能解释为什么会这样吗


我问的原因是我在GTX 590上写了一个运行非常快的光线跟踪器。从大多数评论来看,我希望我的光线跟踪器在HD7970上运行速度快四倍。然而,它实际上运行速度慢了四倍!我不明白为什么。我不使用图像缓冲区。我将像素写入全局内存。当我分析内核时间时,我发现HD 7950内核时间慢了四倍,因此我知道问题出在内核端,而不是在通过PCI总线移动数据时。

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

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

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

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

<>始终尽量尽量少使用全局内存(请查看英伟达或AMD手册,以了解每个内存访问的确切周期数)。
如果您想了解更多信息,请务必告诉我:)

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

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

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

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

<>始终尽量尽量少使用全局内存(请查看英伟达或AMD手册,以了解每个内存访问的确切周期数)。
如果您想了解更多信息,请务必告诉我:)

我的问题是,为什么Nvidia比AMD的全局内存速度快得多。上一代费米GTX 580的速度几乎是最新一代Radeon 7970的两倍!Nvidia上的全局内存访问速度快得多吗?只要我不需要读写,我可以使用图像缓冲区做任何事情吗?我的意思是,如果我在处理与图像无关的数据,但我只需要写我应该/可以使用图像缓冲区吗?你可以检查一下,在Nvidia和AMD中访问全局内存需要多少GPU周期。是的,只要不需要读写,就可以使用图像缓冲区。当然,您可以使用图像缓冲区。每像素可以有四个通道(RGB),一次对图像缓冲区的提取可以提供四个值,因此速度更快。与OpenGL中的图像缓冲区中的图像不同,您不受限制。如果你仍然有疑问,我可以在回家后提供一个例子,以便更好地理解。好的,谢谢你提供的信息。我还没有想到要对非图像数据使用图像缓冲区。据我所知,图像缓冲区的优点之一是它们是缓存的。常量内存也会被缓存,但它要小得多。@raxman yes图像缓冲区的优点是它们是缓存的,并且性能比全局内存要好得多。但只能是只读或只写。因此,您需要根据需要使用它们。在这种情况下,应该避免使用全局内存,除非同时需要读/写。图像缓冲区和其他设备(如CPU)上的全局内存之间的连接是什么?在CPU上使用图像缓冲区的速度与全局内存的速度相同。有重复的代码是不合适的。一个形式化的问题是为什么Nvidia看起来比AMD的全局内存快得多。上一代费米GTX 580的速度几乎是最新一代Radeon 7970的两倍!Nvidia上的全局内存访问速度快得多吗?只要我不需要读写,我可以使用图像缓冲区做任何事情吗?我的意思是,如果我在处理与图像无关的数据,但我只需要写我应该/可以使用图像缓冲区吗?你可以检查一下,在Nvidia和AMD中访问全局内存需要多少GPU周期。是的,只要不需要读写,就可以使用图像缓冲区。当然,您可以使用图像缓冲区。每像素可以有四个通道(RGB),一次对图像缓冲区的提取可以提供四个值,因此速度更快。与OpenGL中的图像缓冲区中的图像不同,您不受限制。如果你仍然有疑问,我可以在回家后提供一个例子,以便更好地理解。好的,谢谢你提供的信息。我还没有想到要对非图像数据使用图像缓冲区。据我所知,图像缓冲区的优点之一是它们是缓存的。常量内存也会被缓存,但它要小得多。@raxman yes图像缓冲区的优点是它们是缓存的,并且性能比全局内存要好得多。但只能是只读或只写。因此,您需要基于o使用它们