在 llvm-8.0.0 中使用 OpenMP 目标卸载

Using OpenMP target offloading in llvm-8.0.0

尝试将 openmp 目标卸载与 llvm 结合使用时,出现以下错误

$ cat offload.cpp
#include <omp.h>
int main() {
#pragma omp target teams distribute parallel for
    for(int i=0; i<100; i++);
     return 0;
}
$ clang++ -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda --cuda-path=$CUDA_TOOLKIT_ROOT_DIR offload.cpp -o offload
$ ./offload
Libomptarget fatal error 1: default offloading policy must switched to mandatory or disabled
$

.

我在 LLVM_PATH 的系统中安装了 llvm-8.0.0。 我从 llvm download 页面下载了 openmp-8.0.0 源代码。为了构建 openmp,我使用了以下命令:

$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$LLVM_PATH -DCMAKE_C_COMPILER=$LLVM_PATH/bin/clang -DCMAKE_CXX_COMPILER= $LLVM_PATH/bin/clang++ -DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES=35,60,70 ..
$ make && make install

OpenMP 构建成功,没有出现任何错误。但是当尝试通过 OpenMP 使用目标卸载时,我得到了上面提到的致命错误。我在 3 台不同的机器上试过,结果相同。

我能够使用 nvcc 在我的系统上构建和 运行 CUDA 示例。

此致,

阿洛克

我找到了答案。为了确保我们为卸载进行编译,我们需要使用标志:

-Xopenmp-target -march=sm_XX

其中 XX 是计算能力。所以对我来说

clang++ -Xopenmp-target -march=sm_35 -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda --cuda-path=$CUDA_TOOLKIT_ROOT_DIR offload.cpp -o offload

工作