3

我看到了一些关于此的线程,但它们似乎与我遇到的问题无关。

我有我的 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 标志。

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

4

1 回答 1

6

当我执行以下操作时,我发现它有效。

nvcc标志-Xcompiler -fopenmp -fgomp文件内容

感谢都铎王朝

于 2012-09-06T01:42:22.670 回答