我在这看到了一些线索,但它们似乎与我遇到的问题无关.
我有我的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标志.
我哪里错了?我需要把旗子放在别处吗?我需要放弃吗?
当我做了以下事情时,我发现它有效.
nvcc 标志 -Xcompiler -fopenmp -fgomp 文件的东西
感谢都铎王朝