# OpenMP 并行计算入门案例
文章目录
OpenMP 设计哲学和优点
OpenMP 是一套 C++ 并行编程框架, 也支持 Forthan .
它是一个跨平台的多线程实现, 能够使串行代码经过最小的改动自动转化成并行的。具有广泛的适应性。这个最小的改动,有时候只是一行编译原语!(在高阶示例中,我们将演示并评估加速性能)
具体实现是通过分析编译原语#pragma
,将用原语定义的代码块,自动转化成并行的线程去执行。每个线程都将分配一个独立的id
. 最后再合并线程结果。
问题来了,学习 OpenMP , 我们怎么开始?
环境要求
在开始之前,我们先确定一下我们的 C++ 编译环境能不能支持 OpenMP.
Windows / Visual Studio 平台
VS 版本不低于2015,都支持 OpenMP .
需要在 IDE 进行设置,才能打开 OpenMP 支持。
设置方式:
调试->C/C+±>语言->OpenMP支持
这实际上使用了编译选项/openmp
。
Linux / GCC 平台
本人用的 Ubuntu 16.04 (经典版) 自带的GCC 5.0.4, 直接支持选项-fopenmp
.
示例源代码
本节所有的代码均放在个人 Github:
tlqtangok > openmp_demo
git clone https://github.com/tlqtangok/openmp_demo.git
验证支持 OpenMP
如果已经设置好了,我们就开始编程来 Double Check 一下吧。
参考目录 00_dep
#include <iostream>
using namespace std;
int main()
{
#if _OPENMP
cout << " support openmp " << endl;
#else
cout << " not support openmp" << endl;
#endif
return 0;
}
运行代码:
g++ -std=c++11 -g -pthread -Wno-format -fpermissive -fopenmp -o main.o -c main.cpp
g++ -std=c++11 -g -pthread -Wno-format -fpermissive -fopenmp -o mainapp.exe main.o
./mainapp.exe
运行输出
support openmp
即表明我们支持 Ope