我知道这取决于显卡和CPU,但是如果考虑NVIDIA最快的GPU和Intel i7处理器的一个内核,会怎么样呢?
我也知道这还取决于算法类型。
我不需要一个严格的答案,但是需要经验丰富的例子,例如:对于一个使用双精度浮点数和每像素10个操作的图像操作算法,在此硬件上运行的第一次需要5分钟,现在只需要x秒。
你的问题太过宽泛,很难回答。此外,仅有少部分算法(那些没有共享状态的算法)适用于GPU。
但我想敦促你对这些声明进行批判性思考。我在图像处理方面有所涉猎,并阅读了许多相关文章,但在GPU的情况下,上传输入数据到GPU,并将结果下载回主内存的时间通常不包括在计算因素中。
虽然有些情况下这并不重要(两者都很小或者还有一个第二阶段的计算将结果进一步缩小),但通常需要传输结果和初始数据。
我曾看到过这将所谓的“加成”变成了负数,因为单是上传/下载时间就比主CPU执行计算所需的时间更长。
对于合并不同GPU卡的结果,基本上也适用于同样的情况。
更新 新一代GPU似乎能够通过ping-pong缓冲区同时上传/下载和计算。但是,建议仍然要彻底检查边界条件。现在市面上存在很多虚假信息。
更新2 对于此类任务来说,使用与视频输出共享的GPU并不是最佳选择。考虑添加一个低预算的视频卡,使用内置视频卡来进行GPGPU任务。
我认为这个OpenCL视频介绍在第一或第二集中给出了一个很好的回答(我记不清了)。 我想它是在第一集的末尾......
通常这取决于你能够将问题"并行化"的程度。问题大小本身也是一个因素,因为将数据复制到显卡需要时间。
你的问题很普遍,难以回答;有许多不同的变量使得很难给出准确或公正的答案。
特别是,你同时比较了1)算法选择2)硬件相对性能3)编译器优化能力4)实现语言选择和5)算法实现效率等多个因素...
请注意,例如,在GPU与CPU上可能更喜欢不同的算法;并且需要考虑到与GPU之间的数据传输时间。
AMD在OpenCL性能方面有一个案例研究(实际上有几个),用于在CPU和GPU上执行OpenCL代码的性能。这里是一个稀疏矩阵向量乘法性能结果的案例。
这非常取决于算法和实现的效率。
总的来说,可以说GPU在计算方面比CPU更好。因此,一个上限是将顶级GPU的理论GFlops评分除以顶级CPU的评分。您可以对理论内存带宽进行类似的计算。
例如,GTX580的1581.1 GFlops与i7 980XE的107.55 GFLOPS相比。请注意,GTX580的评分是针对单精度的。我认为,您需要将Fermi类非Tesla的评分降低4倍,才能得到双精度评分。因此,在这种情况下,您可能会期望大约4倍的速度提升。
以下是可能使您获得更好结果(或看到声称速度提升远大于4倍)的警告:
一旦数据在显卡上,GPU的内存带宽比CPU更好。有时候,内存受限算法在GPU上表现良好。
巧妙利用缓存(纹理内存等)可以让你做得比宣传带宽更好。
像Marco所说,转移时间并未包含在内。我个人总是把这个时间包含在我的工作中,因此发现最大的加速在迭代算法中,在这些算法中所有数据都适合于GPU(我在中档CPU到中档GPU上获得了超过300倍的个人记录)。
不同类型的比较。将顶级GPU与低端CPU进行比较本质上是不公平的。反驳是高端CPU的成本要比高端GPU高得多。一旦转向GFlops/$或GFlops/Watt比较,GPU的优势就会更明显。
__kernel void vecAdd(__global float* results )
{
int id = get_global_id(0);
}
我看到的数字范围从2倍到400倍不等。我也知道中档GPU在双精度计算方面无法与高档CPU竞争-在8核Xeon上使用MKL比在300美元的GPU上使用CULA或CUBLAS更快。
据说OpenCL比CUDA慢得多。