我看到了一些关于此的线程,但它们似乎与我遇到的问题无关。
我有我的 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
其他所有信息都是无关信息,重要的是我只需将 -fopenmp 添加到 makefile 的标志行中。
但是,由于 CUDA 非常复杂,并且使用 nvcc (其中使用 c++ 编译器作为其主干)(对吗?),我似乎不知所措。当我将 -fopenmp 添加到
CPPFLAGS = ... *many cuda flags* -fopenmp
我收到上述错误。
我什至试过
CPPFLAGS = ... *many cuda flags* -fopenmp -lgomp
还要注意的是,当我配置我的项目时,启用 CUDA 时禁用 GCC 标志。
我哪里错了?我需要把旗帜放在别处吗?我需要放弃吗?