OpenMP和OpenCL是截然不同的,但可以一起工作.他们俩都不应该"打破"另一个.
为了论证,我们假设在最小化对现有代码库的更改与性能或计算能力之间存在权衡.OMP是"容易的",因为你可以"神奇地"将它应用于一个或两个快速实用的令人尴尬的并行问题.
OpenCL引入了超越典型操作系统线程模型的全新高级概念.Khronos可能不想大声说出来,但它的起源是在NVIDIA的CUDA中.如果您想了解它今天的工作原理,请下载CUDA SDK并开始播放.如果您没有任何NVIDIA GPU,请不要担心,有GPU仿真器软件选项.OpenCL是GPU的一个方便的抽象,应该适用于CPU,DSP,"加速器"(Khronos的IBM的CellBE和可能是英特尔的Larrabee的昵称).
OpenCL不应该"直接用C99编写".它被称为C99扩展,因为它的语法与C99类似/相同,带有一些新的关键字.您无法从内核调用libc(或任何其他库).
您可以使用两者,但理论上,如果您愿意移植代码,OpenCL应该"更好"(因为它可以移植到更多的计算设备).您不能在OpenCL内核中使用OpenMP pragma.
也可以看看:
http://wikipedia.org/wiki/OpenCL
CUDA
LLVM