偶然发现了这个论坛帖子dot product faster on cpu than on gpu using OpenCL,我再次被提醒,有些实例看起来像是为OpenCL *制作的,但是在使用它们的地方,OpenCL没有为我们提供收益。即我也有一个使用pyopencl代码的kmeans实现,它比简单的python代码快几倍,但仍然比kmeans的scipy函数快几倍。
那你怎么决定何时使用OpenCL?
或者它是否是这些三角形情况之一,您只能(/必须)选择三个角中的两个以使其有效?
problem size /\ / \ / \ / \ /________\ GPU/CPU optimization
我知道,我对标题和问题使用了一些过于大胆的语言。如果我能想到更合适的措辞,我会改变它。
感谢。
*简单的矩阵运算,如点积,kmeans或矩阵乘法
答案 0 :(得分:12)
真正的关键应该是你的算法中是否有很多固有的并行化,你可以在其中移交数据集并在其上进行大量的并行处理。请记住,GPU可能有许多核心,但它们每个只有时钟.5-1GHZ。优势在于处理大量并行操作以获得极高的吞吐量。
将吞吐量视为(数据计算*频率*流水线阶段) - 因此,与其中一个GPU内核相比,将频率与频率的1/6进行权衡,但核心数量可能超过6 *(管道阶段)。
当然还有CPU的额外开销< - > GPU屏障以及您的算法可能会导致多个GPU时钟周期进行计算..
答案 1 :(得分:8)
答案的几个要素:
答案 2 :(得分:6)
与每项技术决策一样,答案取决于达成目标。有关GPU的OpenCL功能的信息可以在供应商页面上找到。注意:并非所有GPU都支持OpenCL,并非所有支持OpenCL的GPU都支持双精度。您也可以考虑可能没有OpenCL环境的客户/客户端。
GPGPU编程(OpenCL和CUDA)适用于(几乎)所有类型的线性代数问题。这些问题很容易并行化,因此很容易适应GPU等并行环境。所有应该在GPU上出现的问题都不需要太复杂和并行设计。这实际上取决于你的问题域。
另一方面,您需要关注OpenCL的一些收益。人们需要将一些数据从RAM复制到GPU并返回,这会导致一些延迟。您应该在CPU和GPU上对不同问题大小进行一些时间测量。您将很容易看到何时达到收支平衡。我在CPU Opteron X64 2x2600和GPU Geforce 8600GTS上尝试了与ATLAS库的矩阵乘法。矩阵乘法只是两个矩阵,尺寸为NxN。休息均为N大约100左右。这个结果在很大程度上取决于所使用的CPU和GPU,并且在其他硬件上可能完全不同。
答案 3 :(得分:0)
GPU是关于进行密集计算的数据处理。您可以通过将计算密集型任务移植到GPU来卸载CPU。您收到的结果取决于您,因为GPU只是一种工具,它需要“正确”使用。