我们可以用OpenCL做什么?

Chi*_*ron 4 java gpu mapreduce opencl

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

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

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

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

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

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

vir*_*nux 7

OpenCL为并行机器上的编程提供了可移植的接口.OpenCL程序可以在CPU或GPU上运行.我没有看到能够同时在CPU和GPU上运行代码的技术.

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

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

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


Ric*_*wig 5

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

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

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

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