我们可以用OpenCL做什么?

时间:2011-04-18 23:38:56

标签: java mapreduce opencl gpu

我一直在阅读有关OpenCL的内容,我找到了这一行:

  

OpenCL为任何应用程序访问图形处理单元以进行非图形计算。

假设我需要在Java或Clojure中执行CPU密集型操作或算法(甚至可能运行Hadoop MapReduce),我可以使用OpenCL在GPU中执行操作吗?如果是的话,为什么我会这样做?

如果我们有CPU,为什么要使用GPU?

OpenCL应用程序的场景是什么?

我读到OpenCL提供了并行编程,这是否意味着它将跨CPU和GPU划分目标作业?还是仅仅在GPU上?

3 个答案:

答案 0 :(得分:7)

OpenCL提供了一个便携式接口,用于在并行机器上进行编程。 OpenCL程序可以在CPU或GPU上运行。我没有看到能够同时在CPU和GPU上运行代码的技术。

将GPU用于通用计算利用了GPU实际上由数百甚至数千个简单的小型处理元件(PE)构建的事实。对于某些任务,此架构可能能够在CPU所需的一小部分时间内完成任务。

GPU的一个缺点是它们实际上是突变SIMD(单指令多数据)机器;因此,大的PE组被约束为同时执行相同的操作,但是在不同的数据上。这种约束使得设计程序变得更加困难。

GPU非常适合任何可以并行化的任务,而不需要在不同线程之间进行大量通信。像NVIDIA CUDA和OpenCL这样的技术已经开始在科学应用和高性能计算中大量使用,这两者都在相当大程度上利用并行性。

答案 1 :(得分:5)

OpenCL是在科学家发现GPU架构能够非常有效地执行线性代数计算之后开发的。

线性代数问题往往很容易并行化,并且在单个元素上非常简单。在大多数向量和矩阵运算中,只需要四个基本数学函数+, - ,/和*。此外,对Max和Min搜索进行一些比较,并且可以在并行环境中进行大量工作。如果问题的大小足够大,从RAM到GPU并返回的数据复制的额外时间远远小于GPU的速度增益,那么就会达到很大的性能提升。

这些技术是从那时开发出来的。第一次计算是通过将问题转换为图形问题并返回来执行的。开发OpenCL是为了提供一个干净的计算接口。

OpenCL适用于可以并行运行而没有太多依赖性且需要大量计算能力的问题。线性代数,搜索算法,信号转换和3D场景以及分裂检查都是典型的例子。

答案 2 :(得分:0)

英特尔对openCL的热情肯定不高。我不认为我能够在我的linux系统上安装驱动程序,它们使它变得如此尴尬。还有其他技术,如德州仪器的数字信号处理芯片。 如果可以,我会使用openCL。然而,在很多应用程序中使用廉价ARM板集群有一些优势。易于编程非常重要,而不是假设存在但从未实际使用过的东西。