I want to write parallel program in C++ using OpenMP, so I am getting started with OpenMP. On the other words I am a beginner and I need good OpenMP guide telling how to install it. Does someone know how to install OpenMP on Windows, then compile and run the program?
3 回答
OpenMP 不是您安装的东西。它随您的编译器一起提供。您只需要一个支持 OpenMP 的体面的编译器,并且您需要知道如何启用 OpenMP 支持,因为默认情况下它通常被禁用。
Windows 的标准编译器来自 Microsoft,它是来自 Visual Studio 的 Microsoft Visual C/C++ 编译器。不幸的是,它的 OpenMP 支持有点过时了——即使是最新最好的 Visual Studio 也只支持 OpenMP 2.0(2002 年过时的标准版本)。有关如何在 Visual Studio 中使用 OpenMP 的更多信息,请参阅此处。还有其他可用的编译器 - 英特尔 C/C++ 编译器(需要商业许可)和 GCC(免费提供)支持较新的 OpenMP 版本,其他编译器也可用。
您可以通过访问此处的 OpenMP 网站开始学习 OpenMP 。这里还有来自劳伦斯利弗莫尔国家实验室的关于 OpenMP 的精彩教程。
2020 年更新:微软现在随 Visual Studio 一起发布适用于 Windows 的 Clang。虽然有点复杂,但可以(ab)使用 Clang-cl 工具集来生成工作的 32 位OpenMP 程序。一些步骤是必要的:
- 如果尚未安装,请使用 Visual Studio 2019 安装程序添加 Clang 和 Clang-cl。
- 将项目的平台工具集(项目属性 -> 常规 -> 平台工具集)设置为“LLVM (clang-cl)”。
-Xclang -fopenmp
通过在项目Properties -> C/C++ -> All Options -> Additional Options中添加编译器选项来启用 Clang OpenMP 支持。
重要提示:确保在切换平台工具集之前禁用 OpenMP 支持(这是新 C++ 项目的默认设置)。/openmp
即使 Clang 的语言配置没有 OpenMP 的选项,VS 似乎记住了设置并且仍然通过。如果在构建过程中clang-cl.exe
抛出错误 MSB8055(不支持/openmp
的选项),请将平台工具集设置回“Visual Studio 2019 (vXXX)”并在Properties -> C/C++ -> Language -> Open MP Support中禁用 OpenMP 支持,然后切换平台工具集再次改为“LLVM (Clang-cl)”。- 添加
libomp.lib
到项目Properties -> Linker -> Input -> Additional Dependencies中的其他库。 - 通过在项目Properties -> Linker -> General -> Additional Library Directories
libomp.lib
中添加具有值的新条目,将路径添加到链接器搜索路径。$(LLVMInstallDir)\lib
添加一个将 LLVM 复制到项目输出目录的构建后操作
libomp.dll
(如果没有此步骤,运行可执行文件将失败,除非libomp.dll
位于 DLL 搜索路径中)。在项目属性 -> 构建事件 -> 构建后事件 -> 命令行中:xcopy /y "$(LLVMInstallDir)\bin\libomp.dll" "$(SolutionDir)$(Configuration)"
构建并运行项目。
注意:这很可能仍然不受 Microsoft 支持,并且它仅适用于 x86 项目,因为 VS 附带的 LLVM 库仅是 32 位的。
下面是我为最终让 OpenMP 在我的 Windows 10 PC 上运行所做的工作:
- Get MinGW - 下载并获取获取基本 gcc 编译器和 g++ 软件包所需的内容(它真的很容易做到)。您可以随时运行
g++ -v
以确保它已启动并运行 - 运行
mingw-get upgrade --recursive "gcc<4.7.*" "gcc-g++<4.7.*"
这是“有趣”的部分。因为此时他们的 4.9.* 版本不支持 libgomp 库,所以我的 gcc 无法识别<omp.h>
最后一个支持版本是 4.7.2,所以我终于能够运行我的 openMP
编译运行g++ -fopenmp myOpenMPFile.cpp -o myOpenMP
,一切都将从那里开始
gcc -fopenmp myOpenMPFile.cpp -o myOpenMP
也适用于 C 代码
我想分享我为让 OpenMP 在我的 Windows 10 PC 上运行所做的工作(2019 年事情变得更加简单)
我使用 GCC 8.2.0 编译器从这里安装了 MinGW 发行版。发行版的维护者已经为 GCC 添加了 winpthreads 和 OpenMP 支持。
我用标志编译了我的代码,
-fopenmp
如下所示:g++ -fopenmp main.cpp -o exec
注意:MinGW 发行版支持许多有用的库(例如 Boost 1.69.0)和其他实用程序。我发现它非常有用。