2010-11-24 127 views
4

与通用单处理器内核相比,CUDA或OpenCL代码运行算法能够提供多快? (考虑为CPU和GPU目标编写和优化算法)。我知道它取决于显卡和CPU,但是说,NVIDIA最快的GPU之一和(单核心)Intel i7处理器之一?我们可以测试CUDA或OpenCL与CPU性能的对比速度吗?

而且我知道它也取决于算法的类型。

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

+2

太多未知数:快速,非常快...... – 2010-11-24 15:04:30

+0

我已经改变了这个问题,所以它打开了可能性说:“不,这是不可能的”或“是的,有一个基准测试套件,这样做比较“等 – Roalt 2010-11-25 06:45:14

回答

9

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

但我确实希望敦促你对索赔进行批评。我正在进行图像处理,并且阅读了许多关于这个主题的文章,但是在GPU情况下经常需要将输入数据上传到GPU并将结果下载回主存储器的时间为而不是包含在计算中因素。

虽然有些情况下这并不重要(两者都很小或者有第二阶段计算可进一步缩小结果大小),但通常不得不传输结果和初始数据。

我已经看到这会将一个声称加上一个否定,因为单独的上传/下载时间比主CPU需要做计算。

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

更新较新的GPU似乎能够使用乒乓缓冲区同时上传/下载和计算。但彻底检查边界条件的建议仍然存在。那里有很多旋转。

0

我见过数字从2倍到400倍不等。我还知道,中等范围的GPU无法在双精度计算中与高范围CPU竞争--8核Xeon上的MKL将比300美元GPU上的CULA或CUBLAS更快。

OpenCL比CUDA慢得多。

+3

我看过数字从0.1x到400x。重要的是要认识到,GPU不适合每一项任务,即使是一个优化好的算法实际上可能会更慢*(低计算密度,大数据集,低参考位置,大相互依赖性,不同控制流) 。 – 2010-11-24 15:22:18

1

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

一般来说,这取决于你可以“平行”的问题。问题的大小本身也是一个因素,因为将数据复制到显卡需要花费时间。

1

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

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

请注意,例如,不同的算法可能更适合GPU与CPU;而且GPU中的数据传输也需要在计时中进行考虑。

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

0

来自橡树岭国家实验室和乔治亚理工学院的新基准测试套件SHOC(Scalable Heterogeneous Computing)具有许多重要内核的OpenCL和CUDA实现。您可以从http://bit.ly/shocmarx下载该套件。请享用。

1

它非常依赖于算法以及实现的效率。总体而言,公平地说,GPU在计算上比CPU好。因此,上限是将顶端GPU的理论GFlops评级除以顶级CPU。您可以对理论存储器带宽进行类似的计算。

例如,GTX580的1581.1 GFlops与i7 980XE的107.55 GFLOPS。请注意,GTX580的评分是针对单精度的。我相信你需要将费米级别的非特斯拉减少4倍,才能达到双倍精度。所以在这个例子中,你可能期望大约4倍。

注意事项,为什么你会做的更好(或看到哪些要求大得多的加速效果):

  1. 图形处理器具有更好的内存带宽比CPU一旦数据卡上。有时,内存绑定算法可以在GPU上表现良好。

  2. 聪明地使用缓存(纹理内存等),它可以让你做的比公布的带宽更好。

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

  4. 苹果进行橙色比较。比较顶级GPU和低端CPU本质上是不公平的。反驳是高端CPU比高端GPU成本高得多。一旦进入GFlops/$或GFlops/Watt比较,它可能看起来更有利于GPU。

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的胜利,直到分支为止。

相关问题