Visual Studio 2015 openmp支持

ExN*_*ile 2 c++ openmp visual-studio-2015

我在Visual Studio 2015中获得OpenMP支持时遇到问题.

我已经将项目选项配置为使用/ openmp(项目 - >属性 - > C/C++ - >语言 - > OpenMP支持:是),代码如下(非常简单的代码,来测试OpenMP):

#include <iostream>
#include <omp.h>

int main(int argc, char* argv[])
{
    int n = 0;

#pragma omp parallel
    {
        std::cout << std::endl << "Hello World!";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

只有一个线程运行并且"Hello World!" 只打印一次.

Gom*_*ero 7

我可以用编译程序VS2015 Community Version 14.0 Update 1Windows 8.1 64bit使用OpenMP支持.

在下面,按照可能有用的步骤列表:

  • 创建新项目并粘贴源代码后,转到

Project-> Properties -> C/C++ -> Language

更改Open MP SupportYes(/openmp)

点击 Apply

  • 在左侧菜单中,转到Command Line并确认/openmp 出现在编译器选项的某处.

如果出现,请单击Ok并构建项目.


在运行程序之前,在该行放置一个断点:

int n = 0;

单击运行该程序 Local Windows Debugger

当程序在断点处停止时,转到 Debug -> Windows -> Disassembly

某处,在断点附近,寻找一条装配线,如:

call __vcomp_fork (?????????h)

如果你找到这一行,很可能openmp是正常运行的.


其他一些可以帮助的检查:

从Windows Sysinternals获取工具,如Process Explorer(GUI)ListDLL(命令行).

的ListDLLs:

程序在断点处停止,打开任务管理器并查找PID该过程.

打开命令提示符并运行命令:

listdlls [PID] | findstr -i vcomp

应该出现像VCOMP140D.DLLVCOMP140.DLLVCOMP????.DLL.

如果没有出现,可能编译器找不到openmp dll,因此您必须查看该库是否在系统的某个位置可用.


最后两个提示可以节省您的时间:

如果您更改任何配置(例如Debug -> Releasex86 -> x64),再检查是否Command Line/openmp设定好的选项.

如果你试图强制编译器使用C语言(而不是C++),也许是pragma:

#pragma omp parallel for

将无法工作(更新:显然这个问题不再发生在VS2017上).

它向我显示了这样的信息:

INTERNAL COMPILER ERROR in 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe'

回到编译器到C++语言,这parallel for将工作正常.