CUDA结合OpenMP

har*_*key 3 c++ cuda openmp

我在这看到了一些线索,但它们似乎与我遇到的问题无关.

我有我的CUDA代码可以工作,但我希望并行化与内核代码异步运行的for循环(以及内核完成后).

我似乎有一个链接问题,但错误就是这样.

.../lib/liblalinference.so:错误:对'omp_get_num_threads'的未定义引用

.../lib/liblalinference.so:错误:对'omp_get_thread_num'的未定义引用

.../lib/liblalinference.so:错误:对'GOMP_barrier'的未定义引用

.../lib/liblalinference.so:错误:对'GOMP_single_start'的未定义引用

.../lib/liblalinference.so:错误:对'GOMP_critical_start'的未定义引用

.../lib/liblalinference.so:错误:对'GOMP_critical_end'的未定义引用

.../lib/liblalinference.so:错误:未定义引用'__gxx_personality_v0'

.../lib/liblalinference.so:错误:对'GOMP_parallel_start'的未定义引用

.../lib/liblalinference.so:错误:对'GOMP_parallel_end'的未定义引用

首先,我想指出我以前有过opemMP工作,但是在我编译C代码的单独部分中

CFLAGS = -g -O2 *many flags here* -fopenmp
Run Code Online (Sandbox Code Playgroud)

其他一切都有无关的信息,重要的是我只需要将-fopenmp添加到makefile中的标志行.

但是,由于CUDA都是复杂的,使用nvcc,使用c ++编译器作为其主干(对吧?),我似乎不知所措.当我添加-fopenmp时

CPPFLAGS =  ... *many cuda flags* -fopenmp
Run Code Online (Sandbox Code Playgroud)

我得到上述错误.

我甚至试过了

CPPFLAGS =  ... *many cuda flags* -fopenmp -lgomp
Run Code Online (Sandbox Code Playgroud)

还要注意的是,当我配置项目时,启用CUDA时会禁用GCC标志.

我哪里错了?我需要把旗子放在别处吗?我需要放弃吗?

har*_*key 6

当我做了以下事情时,我发现它有效.

nvcc 标志 -Xcompiler -fopenmp -fgomp 文件的东西

感谢都铎王朝

  • 好的,现在请将此答案标记为已接受.:) (2认同)