我们可以使用OpenCL做什么?

问题描述

| 我一直在阅读有关OpenCL的信息,发现以下行: OpenCL允许任何应用程序访问图形处理单元以进行非图形计算。 可以说我需要用Java或Clojure(甚至可能运行Hadoop MapReduce)执行cpu密集型操作或算法,是否可以使用OpenCL在GPU中执行该操作?如果是,我为什么要这样做? 如果我们有cpu,为什么要使用GPU? OpenCL应用程序的场景是什么? 我了解到OpenCL提供了并行编程,这是否意味着它将在cpu和GPU之间划分目标作业?还是仅通过GPU?

解决方法

OpenCL提供了一个可移植的接口,用于在并行计算机上进行编程。 OpenCL程序可以在CPU或GPU上运行。我还没有看到可以同时在CPU和GPU上运行代码的技术。 将GPU用于通用计算充分利用了GPU实际上是由数百甚至数千个简单的小型处理元件(PE)构建而成的事实。对于某些任务,此体系结构可能能够在CPU所需时间的一小部分内完成任务。 GPU的一个缺点是它们实际上是变异的SIMD(单指令多数据)计算机。因此,大批的PE被约束为同时执行相同的操作,但执行的是不同的数据。这种限制使程序设计更加困难。 GPU非常适合可以并行执行的任务,而无需在不同线程之间进行大量通信。像NVIDIA的CUDA和OpenCL之类的技术已开始在科学应用程序和高性能计算中得到大量使用,这两种技术都充分利用了并行性。,OpenCL是在科学家发现GPU架构能够非常有效地执行线性代数计算之后开发的。 线性代数问题往往很容易并行化,并且在单个元素上非常简单。在大多数矢量和矩阵运算中,只需要四个基本数学函数+,-,/和*。此外,还可以对“最大”和“最小”搜索进行一些比较,并且可以在并行环境中完成大量工作。如果问题的大小足够大,以至于从RAM到GPU以及从RAM到GPU的数据复制所花费的额外时间远小于GPU的速度增益,那么性能将大大提高。 从那时起就开发了该技术。最初的计算是通过将问题转换为图形问题再返回来进行的。 OpenCL的开发旨在提供干净的计算接口。 OpenCL适用于无需太多依赖项即可并行运行且需要大量计算能力的问题。线性代数,搜索算法,信号和3D场景的转换以及粘连检查是经典示例。,英特尔当然对openCL不那么热衷。我认为我无法在Linux系统上安装驱动程序,它们使它变得如此尴尬。还有其他技术,例如德州仪器(TI)的数字信号处理芯片。 如果可以的话,我会使用openCL。但是,将便宜的ARM板簇用于很多应用程序有一些优点。易于编程非常重要,而不是假设那里没有实际使用过的东西。