Использование разгрузки цели OpenMP в llvm-8.0.0 - PullRequest
0 голосов
/ 20 июня 2019

При попытке использовать openmp target offloading с 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-8.0.0 в LLVM_PATH. Я загрузил исходный код openmp-8.0.0 со страницы llvm download . Для сборки 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 разных машинах, с одинаковым результатом.

Я могу создавать и запускать примеры CUDA в моей системе с помощью nvcc.

С уважением,

Alok

1 Ответ

0 голосов
/ 24 июня 2019

Я нашел ответ. Чтобы убедиться, что мы компилируем для разгрузки, нам нужно использовать флаги:

-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

1010 * работал *

...