我们可以对CUDA或OpenCL与CPU性能的比较进行基准测试吗?

时间:2010-11-24 15:02:01

标签: c cuda opencl gpu-programming cpu-speed

与普通单处理器内核相比,CUDA或OpenCL代码上的算法运行速度有多快? (考虑到算法是针对CPU和GPU目标编写和优化的)。

我知道这取决于显卡和CPU,但是说,NVIDIA最快的GPU之一和英特尔i7处理器的(单核)?

我知道这也取决于算法的类型。

我不需要严格的答案,但经验丰富的例子如:用于使用双精度浮点的图像处理算法和每个像素10次操作需要前5分钟,现在使用此硬件在x秒内运行。 / em>的

7 个答案:

答案 0 :(得分:9)

你的问题过于宽泛,很难回答。此外,只有一小部分算法(处理没有太多共享状态的算法)可用于GPU。

但我确实想敦促你对索赔持批评态度。我正在进行图像处理,并阅读了很多关于这个主题的文章,但在GPU案例中,将输入数据上传到GPU并将结果下载回主内存的时间包括在因子的计算中。

虽然有少数情况下这无关紧要(两者都很小或者第二阶段计算进一步减少了结果的大小),但通常必须传输结果和初始数据。

我已经看到这会使声称的加成为负数,因为单独的上传/下载时间比主CPU需要进行计算的时间长。

几乎同样的事情适用于组合不同GPU卡的结果。

更新更新的GPU似乎可以使用乒乓缓冲区同时上传/下载和计算。但建议彻底检查边境条件仍然存在。那里有很多东西。

答案 1 :(得分:1)

我认为这个video introduction给OpenCL在第一集或第二集(我不记得)中给出了一个很好的答案。我认为这是在第一集结束时...

一般来说,这取决于您可以“并行化”问题的程度。问题规模本身也是一个因素,因为将数据复制到图形卡需要花费时间。

答案 2 :(得分:1)

你的问题一般来说很难回答;只有很多不同的变量使得难以给出准确或公平的答案。

值得注意的是,您正在比较两者:1)算法的选择2)硬件的相对性能3)编译器优化能力4)实现语言的选择和5)算法实现的效率,同时...

请注意,例如,在GPU与CPU之间可能更喜欢不同的算法;并且需要在时间上考虑与GPU之间的数据传输。

AMD在CPU和GPU上执行OpenCL代码的OpenCL性能案例研究(实际上有几个)。 Here是具有稀疏矩阵向量乘法的性能结果的那个。

答案 3 :(得分:1)

这在很大程度上取决于算法以及实现的效率。

总的来说,可以说GPU在计算上要比CPU好。因此,上限是将顶端GPU的理论GFlops评级除以顶端CPU。您可以对理论内存带宽进行类似的计算。

例如,GTX580为1581.1 GFlops,而i7 980XE为107.55 GFLOPS。请注意,GTX580的等级是针对单精度的。我相信你需要将费米级非特斯拉降低4倍才能达到双精度等级。所以在这种情况下,你可能会期望大约4倍。

关于为什么你可能会做得更好(或看到声称速度更快的结果)的注意事项:

  1. 一旦数据在卡上,GPU的内存带宽就会高于CPU。有时,内存绑定算法可以在GPU上运行良好。

  2. 巧妙使用缓存(纹理内存等),可以让你做得比广告带宽更好。

  3. 像Marco说的那样,传输时间没有包括在内。我个人总是在我的工作中加入这样的时间,因此我发现我所看到的最大加速算法是迭代算法,其中所有数据都适合GPU(我在中端CPU上获得了超过300x到中端GPU) )。

  4. 苹果与橙色比较。比较高端GPU与低端CPU本质上是不公平的。反驳的是,高端CPU的成本远高于高端GPU。一旦你进行GFlops / $或GFlops / Watt比较,它看起来对GPU更有利。

答案 4 :(得分:0)

我看到的数字从2x到400x不等。我也知道中档GPU在双精度计算中无法与高端CPU竞争--8核Xeon上的MKL在300美元GPU上将比CULA或CUBLAS更快。

OpenCL比CUDA慢得多。

答案 5 :(得分:0)

来自Oak Ridge国家实验室和佐治亚理工学院的一个名为SHOC(可扩展异构计算)的新基准测试套件具有许多重要内核的OpenCL和CUDA实现。您可以从http://bit.ly/shocmarx下载该套件。享受。

答案 6 :(得分:0)

__kernel void vecAdd(__global float* results )
{
   int id = get_global_id(0);
}

这个内核代码可以在10毫秒内在新的60美元R7-240 GPU上产生16M线程。

这相当于10纳秒内的16个线程创建或上下文切换。什么是140 $ FX-8150 8核CPU时序?它是每个核心50纳秒的1个线程。

在这个内核中添加的每个指令都是gpu的胜利,直到它进行分支。