[多线程/并行编程]配置 openmp/libgomp 库
发表于 : 2016年10月22日 11:40
http://openmp.org的描述是:The OpenMP API specification for parallel programming
关于这个库的获取
TDM-GCC MinGW Compiler Sources / Vanilla Sources / gcc-5.1.0.tar.bz2
MinGW MinGW / Base / gcc / Version5 / gcc-5.3.0-2 / gcc-5.3.0-2-mingw32-src.tar.xz
示例代码
https://github.com/OpenMP/Examples
关于这个库的获取
- 安装TDM-GCC (4.x版本或以上)的时候,带有omp.h,但实际没有解压相关库文件,需要在安装时点开选项列表,选中openmp再安装
- 在 tdm-gcc.tdragon.net/download Packages 下方的列表中下载 gcc-5.1.0-tdm64-1-openmp.zip
或者从 Sourceforege - tdm-gcc 页面 中下载 gcc-5.1.0-tdm64-1-openmp.zip,里面已经包含32位和64位的静态库和动态库
TDM-GCC MinGW Compiler Sources / Vanilla Sources / gcc-5.1.0.tar.bz2
MinGW MinGW / Base / gcc / Version5 / gcc-5.3.0-2 / gcc-5.3.0-2-mingw32-src.tar.xz
示例代码
https://github.com/OpenMP/Examples
编译器支持
主流C/C++编译器,如gcc与visual C++,都内在支持OpenMP。一般都必须在程序中#include <omp.h>
Visual C++需要在IDE的编译选项->语言->支持OpenMP。这实际上使用了编译选项/openmp
优点和缺点
优点
可移植的多线程代码(在C/C++和其他语言中,人们通常为了获得多线程而调用特定于平台的原语)
简单,没必要向MPI中那样处理消息传递
增量并行,一次可以只在代码的一部分执行,对代码不需要显著的改变
统一的顺序执行和并行执行的代码,在顺序执行编译器上,OpenMP的执行按照注释进行对待;
缺点
存在引入难以调试的同步错误和竞争条件的风险
目前,只能在共享内存的多处理器平台高效运行
需要一个支持OpenMP的编译器
可扩展性是受到内存架构的限制
不支持比较和交换
在GPU上不能使用
多线程的可执行文件的启动需要更多的时间,可能比单线程的运行的慢,因此,使用多线程一定要有其他有优势的地方
很多情况下使用多线程不仅没有好处,还会带来一些额外消耗
分割线