OpenCL为并行机器上的编程提供了可移植的接口.OpenCL程序可以在CPU或GPU上运行.我没有看到能够同时在CPU和GPU上运行代码的技术.
将GPU用于通用计算利用了GPU实际上由数百甚至数千个简单的小型处理元件(PE)构建的事实.对于某些任务,此架构可能能够在CPU所需的一小部分时间内完成任务.
GPU的一个缺点是它们实际上是突变SIMD(单指令多数据)机器; 因此,大的PE组被约束为同时执行相同的操作,但是在不同的数据上.这种约束使得设计程序变得更加困难.
GPU非常适合任何可以并行化的任务,而不需要在不同线程之间进行大量通信.像NVIDIA CUDA和OpenCL这样的技术已经开始在科学应用和高性能计算中大量使用,两者都在相当大程度上利用并行性.
在科学家发现GPU架构能够非常有效地执行线性代数计算之后,开发了OpenCL.
线性代数问题往往很容易并行化,并且在单个元素上非常简单.在大多数向量和矩阵运算中,只需要四个基本数学函数+, - ,/和*.此外,对Max和Min搜索进行一些比较,并且可以在并行环境中进行大量工作.如果问题大小足够大,从RAM到GPU并返回的数据复制的额外时间远小于GPU的速度增益,则可以实现大的性能提升.
这些技术不仅仅是开发出来的.第一次计算是通过将问题转换为图形问题并返回来执行的.开发OpenCL是为了提供一个干净的计算接口.
OpenCL适用于可以并行运行而没有太多依赖性且需要大量计算能力的问题.线性代数,搜索算法,信号转换和3D场景以及分裂检查都是经典的例子.
| 归档时间: |
|
| 查看次数: |
2118 次 |
| 最近记录: |