CUDA与OpenCL的性能比较

时间:2014-05-06 15:13:58

标签: cuda opencl

我正在使用CUDA 6.0以及与CUDA SDK捆绑在一起的OpenCL实现。我为每个平台提供了两个相同的内核(它们在特定于平台的关键字中有所不同)。它们只读写全局内存,每个线程的位置不同。 CUDA的启动配置为200 blocks of 250 threads (1D),它直接对应于OpenCL的配置 - 50,000 global work size and 250 local work size

OpenCL代码运行得更快。这有可能还是我错了?我的理解是NVIDIA的OpenCL实现基于CUDA的实现。使用OpenCL,我的性能提高了15%。

如果你能说明为什么我会看到这个以及NVIDIA实施的CUDA和OpenCL之间的某些差异,那会很棒吗?

1 个答案:

答案 0 :(得分:20)

在现代GPU上执行的内核几乎从不受计算限制,并且几乎总是受内存带宽约束。 (因为与可用的内存路径相比,运行的计算核心数量如此之多。)

这意味着给定内核的性能通常很大程度上取决于给定算法所显示的内存访问模式。

在实践中,这使得很难预测(或甚至理解)提前预期的表现。

您观察到的差异可能是由于OpenCL与CUDA工具链进行的不同优化导致两个内核之间的内存访问模式存在细微差别。

要了解如何优化GPU内核,您需要了解可用的内存缓存硬件的详细信息,以及如何最有效地使用它。 (例如,战略性地使用"本地"内存缓存,而不是直接转到OpenCL中的全局"内存。)