标题几乎总结了它。我想在一个必须首先通过nvcc的文件中为主机代码启用openMP。如果以下是" test.cu"
#include <iostream>
#include <omp.h>
int main()
{
#pragma omp parallel
{
std::cout << "Hi " << omp_get_thread_num()+1 << "/" << omp_get_num_threads() << "!\n";
}
return 0;
}
我在Ubuntu 16.04上使用CUDA 8(nvcc 8.0.44)和g ++ 5.4.0(nvcc -O2 test.cu -o testCu -std=c++11 -Xcompiler -fopenmp && ./testCu
)编译我得到(正如预期的那样):
嗨2/3!
嗨1/3!
你好3/3!
然而,使用VS2015我得到:
嗨0/1!
而且,是的,我启用了/openmp
(如果我将名称更改为test.cpp并将编译器更改为cl,则可以正常工作。)
答案 0 :(得分:3)
正如talonmies和Robert Crovella指出的那样,我们必须通过nvcc明确地将$_DB = Database:i()
标志传递给cl。使用命令行时,这很简单。使用Visual Studio时,需要在属性页中添加cl的所有参数。打开项目或特定/openmp
文件的属性。配置属性&gt; CUDA C / C ++&gt;主办。将命令行选项(.cu
)添加到Additional Compiler Options字段。
进行健全性检查并查看CUDA C / C ++&gt;命令行显示它 not 出现,但是通过检查输出窗口,我们看到传递了两个/openmp
个参数,其中一个参数出现在CUDA C / C ++&gt;中。命令行(例如-Xcompiler
)和手动添加命令的命令行(例如-Xcompiler "/EHsc /W3 /nologo /O2 /FS /Zi /MD "
)。