PGI上的OpenMP目标指令的结果

时间:2017-12-24 16:20:48

标签: c++ openmp pgi

我正在使用PGI编译以下程序,该程序使用OpenMP的目标指令将工作卸载到GPU:

#include <iostream>
#include <cmath>

int main(){
  const int SIZE = 400000;

  double *m;
  m = new double[SIZE];

  #pragma omp target teams distribute parallel for
  for(int i=0;i<SIZE;i++)
    m[i] = std::sin((double)i);

  for(int i=0;i<SIZE;i++)
    std::cout<<m[i]<<"\n";
}

我的编译字符串如下:

pgc++ -omp -ta=tesla,pinned,cc60 -Minfo=accel  -fast test2.cpp

编译成功,但它缺少我用OpenACC得到的一系列输出,告诉我编译器实际对指令做了什么,如下:

main:
  8, Accelerator kernel generated
     Generating Tesla code
     11, #pragma acc loop gang, vector(128) /* blockIdx.x threadIdx.x */
  8, Generating implicit copyout(m[:400000])

如何获取OpenMP的类似信息? -Minfo本身似乎没有产生任何有用的东西。

1 个答案:

答案 0 :(得分:2)

“ - Minfo”(与“-Minfo = all”相同)或“-Minfo = mp”将为您提供OpenMP编译的编译器反馈消息。

尽管如此,PGI仅支持我们的LLVM后端编译器的OpenMP 4.5指令。这些在IBM Power系统上默认可用,或者作为x86上LLVM beta编译器的一部分提供。 x86 beta编译器可以在http://www.pgroup.com/support/download_llvm.php找到,但需要专业版许可证。

此外,我们当前的OpenMP 4.5仅针对多核CPU。我们正在研究GPU目标卸载,但这种支持暂时无法使用。