OpenMP可以扩展到包括图形处理器吗?

时间:2015-04-17 16:49:51

标签: multithreading cuda opencl gpu openmp

我正在阅读有关并行处理的OpenMP和其他主题,并发现其中大量声称CUDA或OpenCL将成为此类系统的未来。但是,我认为OpenMP的某些修改版本是最佳解决方案,并且没有看到GPU不应该运行线程的原因。

所以我的问题是,GPU能否像CPU一样运行线程,是否可以扩展OpenMP以支持GPU?这有什么理论问题吗?

我读到最新的OpenMP标准支持GPU但是没有一个实现。如果有一个实现,它将如何比“内核”更好或更差? OpenCL使用的模型?

2 个答案:

答案 0 :(得分:6)

  

GPU可以像CPU一样运行线程

GPU线程和现代多核CPU线程的典型定义在行为和功能上有很大差异。 GPU线程在某种程度上具有支持线程的所有必要功能,但是尝试在GPU线程上强加CPU风格的线程模型通常会导致GPU性能不佳。 GPU线程需要以一致的方式在组中工作,以实现高性能。因此,(见下文)OpenMP4 加速器模型看起来与传统的多核CPU加速的OpenMP指令不同。

  

可以扩展OPENMP以支持GPU。

OpenMP 4具有加速器模型指令功能(OMP4中的新功能)。所以(理论上)将OpenMP样式加速扩展到加速器(GPU,Xeon Phi等)当然是可能的

至少对于GPU来说,这个OpenMP指令功能通常看起来明显不同于指令注释的类型,该指令注释将用于多核CPU上的普通/传统OpenMP使用。

  

不存在任何一个实现。

该标准最近发布,编译器供应商可能需要一些时间才能实现该标准。 rose compiler是面向研究的编译器的一个例子,用于测试(早期实现)OpenMP 4加速器模型。 Recent versions of intel ICC may have some support for OpenMP 4 targetting Xeon Phi, and Cray compilers may have some support for OpenMP 4 targetting GPUs (in Cray systems)

另请注意,OpenMP是一个不断发展的标准,加速器模型非常新,因此未来可能会在某种程度上改变/发展,至少在加速器模型中是这样。

答案 1 :(得分:-1)

GPU通常与CPU多处理模型不同。通用 CPU 实现SIMD SMP,因此每个处理器内核可以独立于另一个核心代码执行,并对独立数据进行操作。但是,GPUS通常会实现SIMD模型,这意味着Cores基本上只能在数据数组上执行相同的指令序列。

OpenMP很适合SISD模型,但SIMD意味着一些限制,因为它们已经开发了像OpenCL或CUDA这样的特殊库