我看到了一些线索,但它们似乎与我遇到的问题无关。
我的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标志。
我哪里错了?我需要把旗子放在别处吗?我需要放弃吗?
答案 0 :(得分:5)
我发现当我做以下事情时它起作用了。
nvcc 标志 -Xcompiler -fopenmp -fgomp 文件内容
感谢Tudor