clang编译器能够将OpenMP区域卸载到GPU

clang编译器能够将OpenMP区域卸载到GPU,c,clang,openmp,offloading,C,Clang,Openmp,Offloading,我读到clang编译器可以将OpenMP区域卸载到GPU。然而,我是 在用叮当声编译代码的过程中感到困惑。这是一个叮当作响的版本 在我们的集群中安装的是3.9.0(tags/RELEASE_390/final 288133)。代码I 想要卸载基本上是矩阵乘法: #pragma omp target parallel for shared(C,P,T) private(i,j,k) for (i=0; i<N; i++) { for (j=0; j<N; j++) {

我读到clang编译器可以将OpenMP区域卸载到GPU。然而,我是 在用叮当声编译代码的过程中感到困惑。这是一个叮当作响的版本 在我们的集群中安装的是3.9.0(tags/RELEASE_390/final 288133)。代码I 想要卸载基本上是矩阵乘法:

#pragma omp target parallel for  shared(C,P,T) private(i,j,k)
  for (i=0; i<N; i++) {
    for (j=0; j<N; j++) {
      for (k=0; k<N; k++) {
        C[i][j] += P[i][k]*T[k][j];
      }
    }
  }

我不知道的是,我安装的clang版本是否能够将代码卸载到GPU,如果能够,我该怎么做。欢迎发表任何意见。

简短回答:根据以下内容:

目前,Clang支持OpenMP 3.1和OpenMP 4.0/4.5的所有非卸载功能。卸载功能正在开发中


在更新的发行说明中,我找不到任何关于它是否同时被正式添加到新版本的信息。不过,似乎有一些人支持。该文件说明了两个插件

  • 用于以下目标的通用64位:

    • powerpc64 ibm linux gnu
    • powerpc64le ibm linux gnu
    • x86_64-pc-linux-gnu
  • cuda,针对目标(请参阅):

    • nvptx nvidia cuda
    • nvptx64 nvidia cuda
如果你想尝试建立自己的叮当声,也许这对你有帮助

可以找到OpenMP实现的列表。GCC 6.1及更新版本完全支持OpenMP 4.5。GCC 5和更高版本似乎支持卸载,但对于Nvidia GPU,只能通过OpenACC进行卸载,请参阅

一般来说,
目标
构造的支持,即卸载,并不等同于GPU(或任何特定设备)支持,因为这需要每个设备的特定设备实现。琐碎的支持是将负载转移到主机设备,例如x86CPU,在没有加速器设备的情况下,这对测试或兼容性没有任何好处


希望有帮助。

自第7版以来,clang支持OpenMP卸载到Nvidia GPU():

Clang获得了对NVPTX目标的OpenMP 4.5卸载的基本支持

要为NVPTX目标编译程序,请使用以下选项:
-fopenmp-fopenmp targets=nvptx64 nvidia cuda
用于64位平台,或
-fopenmp-fopenmp targets=NVPTX nvidia cuda
用于32位平台

clang -O3 -fopenmp-targets=x86_64-unknown-linux-gnu mm.c
clang-3.9: warning: argument unused during compilation: '-fopenmp-targets=x86_64-unknown-linux-gnu'