如何在通过nvcc到VS2015的文件上启用OMP?

时间:2016-12-06 15:34:48

标签: c++ cuda openmp

标题几乎总结了它。我想在一个必须首先通过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,则可以正常工作。)

1 个答案:

答案 0 :(得分:3)

正如talonmiesRobert 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 ")。