何时使用OpenCL?

时间:2011-04-20 12:13:13

标签: opencl

偶然发现了这个论坛帖子dot product faster on cpu than on gpu using OpenCL,我再次被提醒,有些实例看起来像是为OpenCL *制作的,但是在使用它们的地方,OpenCL没有为我们提供收益。即我也有一个使用pyopencl代码的kmeans实现,它比简单的python代码快几倍,但仍然比kmeans的scipy函数快几倍。

那你怎么决定何时使用OpenCL?

  • 您需要什么显卡?显卡必须有多少“比cpu好”。 Quadro FX 580与i7 860相比足够吗?
  • 问题有多大?你需要数百万次乘法来获得一些东西还是几百个?
  • 为了使OpenCL值得,还需要对kmeans或dot产品这样的“简单”算法进行多少优化?

或者它是否是这些三角形情况之一,您只能(/必须)选择三个角中的两个以使其有效?

    problem size
        /\
       /  \
      /    \
     /      \
    /________\
GPU/CPU   optimization

我知道,我对标题和问题使用了一些过于大胆的语言。如果我能想到更合适的措辞,我会改变它。

感谢。

*简单的矩阵运算,如点积,kmeans或矩阵乘法

4 个答案:

答案 0 :(得分:12)

真正的关键应该是你的算法中是否有很多固有的并行化,你可以在其中移交数据集并在其上进行大量的并行处理。请记住,GPU可能有许多核心,但它们每个只有时钟.5-1GHZ。优势在于处理大量并行操作以获得极高的吞吐量。

将吞吐量视为(数据计算*频率*流水线阶段) - 因此,与其中一个GPU内核相比,将频率与频率的1/6进行权衡,但核心数量可能超过6 *(管道阶段)。

当然还有CPU的额外开销< - > GPU屏障以及您的算法可能会导致多个GPU时钟周期进行计算..

答案 1 :(得分:8)

答案的几个要素:

  • Dot产品不是最适合在GPU上运行的操作,因为它本质上是一种减少,需要线程之间的同步。
  • 任何“最近的”GPU都可以:NVIDIA GTX 2xx,ATI / AMD HD5xxx或更高版本最适合OpenCL使用。
  • 将数据移入/移出GPU的速度很慢,在最佳情况下通常为6 GB / s。如果数据适合CPU缓存,则CPU可能会更快,除非任务的计算/ IO比率很大。
  • 简单算法的高效代码可以在AMD / NVIDIA代码示例和各种网站中找到。对于其他算法,找到正确的设计并优化代码可能需要一些时间。在某种程度上,优化是针对每个微架构的,并且需要更多时间。

答案 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只是一种工具,它需要“正确”使用。