CUDA结合OpenMP

时间:2012-09-05 20:39:10

标签: 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

其他所有内容都有无关紧要的信息,重要的是我只需要将-fopenmp添加到makefile中的标志行。

然而,由于CUDA都是复杂的,使用nvcc,使用c ++编译器作为其主干(对吗?),我似乎不知所措。当我将-fopenmp添加到

CPPFLAGS =  ... *many cuda flags* -fopenmp

我收到上述错误。

我甚至尝试过

CPPFLAGS =  ... *many cuda flags* -fopenmp -lgomp

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

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

1 个答案:

答案 0 :(得分:5)

我发现当我做以下事情时它起作用了。

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

感谢Tudor