2016-03-06 185 views
3

当程序在GPGPU上运行时,如果使用OpenMP和OpenCL实现,它的执行方式会有什么不同?OpenMP与OpenCL的区别在于GPGPU?

OpenMP是否通过OpenCL使用GPGPU? 如果不是,我可以直接使用它们的普通GPGPU API(没有任何OpenMP/OpenCL构建于其上)?

P.S.在Linux上,OpenMP仅使用pthread来管理线程。除了OpenCL和CUDA之外,我找不到任何其他GPGPU的API,所以很明显(但非常痛苦)承认OpenMP,当谈到GPGPU时,使用OpenCL(或者如果GPGPU是NVIDIA和OpenMP,那么CUDA是智能)。

+0

OpenMP编译器和运行时供应商决定如何实现GPGPU卸载。技术和实施API有所不同。 –

+0

@HristoIliev感谢您的评论。 GPGPU开发周期的理解现在已经搞乱了:据我所知,OpenCL公开了标准,GPGPU开发人员(和Xeon Phi)应遵循的标准称为_OpenCL compatible_。今天他们都是这样称呼的,所以有可能假设这样的硬件朝着OpenCL架构发展。好,但!我们有OpenMP的存在,它也提供了与OpenCL不同的GPGPU接口。因此,OpenMP通过OpenCL使用GPGPU,或者有两种GPGPU开发标准,这是不太可能的。 – Slav

回答

0

就我所关心的,OpenMP是一组编译器指令,用于在共享内存体系结构上提供并行性,而GPGPU通常不是这样的。 您可以以存档更好的性能,同时使用这两个或者你可以使用OpenACCOpenHMPPC++ AMP,可准代替它们,也可以使用这样的库,AMD BoltArrayFire - 它们可以让你利用GPGPU没有很多的努力。