我们可以对比CUDA或OpenCL与CPU性能的速度吗?

5
一个使用CUDA或OpenCL代码的算法相比于一个普通的单处理器核心能够快多少?(假设该算法针对CPU和GPU进行了编写和优化)
我知道这取决于显卡和CPU,但是如果考虑NVIDIA最快的GPU和Intel i7处理器的一个内核,会怎么样呢?
我也知道这还取决于算法类型。
我不需要一个严格的答案,但是需要经验丰富的例子,例如:对于一个使用双精度浮点数和每像素10个操作的图像操作算法,在此硬件上运行的第一次需要5分钟,现在只需要x秒。

2
太多未知数:快速,非常快... - Mitch Wheat
我已经修改了问题,以便可以回答:“不,这是不可能的”或“是的,有一个基准套件可以进行这些比较”,等等。 - Roalt
7个回答

11

你的问题太过宽泛,很难回答。此外,仅有少部分算法(那些没有共享状态的算法)适用于GPU。

但我想敦促你对这些声明进行批判性思考。我在图像处理方面有所涉猎,并阅读了许多相关文章,但在GPU的情况下,上传输入数据到GPU,并将结果下载回主内存的时间通常包括在计算因素中。

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

我曾看到过这将所谓的“加成”变成了负数,因为单是上传/下载时间就比主CPU执行计算所需的时间更长。

对于合并不同GPU卡的结果,基本上也适用于同样的情况。

更新 新一代GPU似乎能够通过ping-pong缓冲区同时上传/下载和计算。但是,建议仍然要彻底检查边界条件。现在市面上存在很多虚假信息。

更新2 对于此类任务来说,使用与视频输出共享的GPU并不是最佳选择。考虑添加一个低预算的视频卡,使用内置视频卡来进行GPGPU任务。


1
谢谢,提到上传/下载是有价值的信息。同时回答说这个问题太过宽泛也很好。 - Roalt
是的,我可以确认最终上传/下载速度比在CPU上处理要慢。但另一个需要考虑的因素是,你可以在CPU设备上使用OpenCL以一种相当简单的方式利用多个处理器和向量指令(SSEx)。我已经在OpenCL中实现了一些图像处理函数,并在CPU上运行它们,效果非常好。(额外的好处:通过在CPU上使用OpenCL在Java中使用SSE) - fho

1

我认为这个OpenCL视频介绍在第一或第二集中给出了一个很好的回答(我记不清了)。 我想它是在第一集的末尾......

通常这取决于你能够将问题"并行化"的程度。问题大小本身也是一个因素,因为将数据复制到显卡需要时间。


1

你的问题很普遍,难以回答;有许多不同的变量使得很难给出准确或公正的答案。

特别是,你同时比较了1)算法选择2)硬件相对性能3)编译器优化能力4)实现语言选择和5)算法实现效率等多个因素...

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

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


1

这非常取决于算法和实现的效率。

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

例如,GTX580的1581.1 GFlops与i7 980XE的107.55 GFLOPS相比。请注意,GTX580的评分是针对单精度的。我认为,您需要将Fermi类非Tesla的评分降低4倍,才能得到双精度评分。因此,在这种情况下,您可能会期望大约4倍的速度提升。

以下是可能使您获得更好结果(或看到声称速度提升远大于4倍)的警告:

  1. 一旦数据在显卡上,GPU的内存带宽比CPU更好。有时候,内存受限算法在GPU上表现良好。

  2. 巧妙利用缓存(纹理内存等)可以让你做得比宣传带宽更好。

  3. 像Marco所说,转移时间并未包含在内。我个人总是把这个时间包含在我的工作中,因此发现最大的加速在迭代算法中,在这些算法中所有数据都适合于GPU(我在中档CPU到中档GPU上获得了超过300倍的个人记录)。

  4. 不同类型的比较。将顶级GPU与低端CPU进行比较本质上是不公平的。反驳是高端CPU的成本要比高端GPU高得多。一旦转向GFlops/$或GFlops/Watt比较,GPU的优势就会更明显。


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

这段核心代码可以在新的60美元R7-240 GPU上在10毫秒内生成16M个线程。
这相当于在10纳秒内创建或切换16个线程。140美元的8核FX-8150 CPU时间是多少?它是每个核心50纳秒的1个线程。
在这个核心中添加的每个指令都是GPU的胜利,直到出现分支。

0

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

据说OpenCL比CUDA慢得多。


3
我看过的数据范围从0.1倍到400倍不等。重要的是要认识到GPU并不适合处理所有任务,即使是经过良好优化的算法实际上可能会 变慢(计算密度低、数据集大、引用局部性差、相互依赖关系大、控制流分歧)。 - Konrad Rudolph
1
现在的情况是,OpenCL 的性能通常与 CUDA 相当。这并不令人惊讶,因为它们在架构上非常相似,甚至实现方式也有很多共同之处(例如 PTX IR)。请注意,默认情况下,OpenCL 更注重正确性而不是性能,这也是需要考虑的因素。 - dietr

0
来自奥克里奇国家实验室和乔治亚理工学院的新基准测试套件名为SHOC(可扩展异构计算),其中包含许多重要内核的OpenCL和CUDA实现。您可以从http://bit.ly/shocmarx下载该套件。祝使用愉快。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接