我能够编译该程序VS2015 Community Version 14.0 Update 1
on Windows 8.1 64bit
具有 OpenMP 支持。
下面列出了可能有帮助的步骤:
Project-> Properties -> C/C++ -> Language
Change Open MP Support
to Yes(/openmp)
Click Apply
- 在左侧菜单中,转到
Command Line
并确认/openmp
出现在编译器选项的某个位置。
如果出现,请单击Ok
并构建项目。
在运行程序之前,在以下行处放置一个断点:
int n = 0;
单击运行该程序Local Windows Debugger
当程序停在断点处时,转到Debug -> Windows -> Disassembly
在断点附近的某个地方,寻找一条装配线,例如:
call __vcomp_fork (?????????h)
如果您找到这一行,则很可能 openmp 正常并且正在运行。
其他一些可以提供帮助的检查:
从 Windows Sysinternals 获取工具,例如流程浏览器 (GUI) https://technet.microsoft.com/en-us/sysinternals/processexplorer or ListDLL(命令行) https://technet.microsoft.com/en-us/sysinternals/bb896656.
列出DLL:
当程序停在断点处时,打开任务管理器并查找PID
的过程。
打开命令提示符并运行命令:
listdlls [PID] | findstr -i vcomp
应该看起来像VCOMP140D.DLL
or VCOMP140.DLL
or VCOMP????.DLL
.
如果它没有出现,则编译器可能无法找到 openmp dll,因此您必须查看该库在系统上的某个时刻是否可用。
最后两个提示可能会节省您的时间:
如果您更改任何配置(例如Debug -> Release
or x86 -> x64
),
再次检查是否Command Line
有/openmp
选项设置好。
如果您尝试强制编译器使用 C 语言(而不是 C++),可能会出现以下编译指示:
#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
会正常工作的。