转载请声明出处:http://blog.csdn.net/zhongkejingwang/article/details/40018735
最近正在听一门叫并行程序设计的课程,课上介绍了程序并行化的分析以及OpenMP的使用,在C/C++代码中使用OpenMP可以将程序代码中比较耗时的操作(如循环体)并行化,感觉就是编译器在编译的时候对代码做了处理,开多个线程执行同一块代码段,至于能否并行处理需要分析代码语句间的依赖关系(主要就是流依赖和反依赖关系),在最新的gcc4.9.1编译器中已经支持OpenMP v4.0标准了。
看起来挺好玩的,而且连gcc都支持了,果断捣鼓一下。关于OpenMP的相关知识可以自行google学习,官网在这里http://openmp.org/wp/。还有另一种用得比较多的并行编程技术MPI,搭建MPI开发环境也是挺麻烦的,下一篇文章将讲解在Eclipse上搭建MPI开发环境。本文将介绍如何在Eclipse上编写OpenMP的并行程序。
首先,下载这个版本的Eclipse:http://www.eclipse.org/downloads/packages/eclipse-parallel-application-developers/lunasr1
这个版本要求jdk1.7以上,所以可以到这里下载最新的jdk:http://www.oracle.com/technetwork/java/javase/downloads/index.html
安装完了jdk在cmd窗口输入javac命令看能不能识别,如果显示不是命令则需要配置JAVA_HOME,百度一下怎么配置吧。能识别javac命令并打印出来一堆东西的话就不用配置了。
jdk安装配置完了如果运行不了上面的Eclipse,把eclipse文件夹里的eclipse.ini里最后两个参数改小一点:
我这里是512和1024,可以都改成512试试。
eclipse准备完毕了,然后下载这个版本的gcc:http://tdm-gcc.tdragon.net/download
下载的时候看清楚32位和64位的。
下载完了点击安装,我的安装路径是C:\TDM-GCC-64:
这时候在cmd输入gcc回车如果提示没有输入文件就没有问题了,否则自己在环境变量里path添加路径。
接下来,最重要的一步:
下载http://tdm-gcc.tdragon.net/download网站里的这个包含OpenMP库的压缩包:
32位系统的下载这个:
64位系统下载这个:
下载完了后解压看到这些文件:
将这些文件全部选择,复制。在这里粘贴:
选择是,合并文件夹。
到这里就已经完成OpenMP开发环境的搭建了,接下来打开Eclipse新建一个OpenMP应用程序吧~~
选择OpenMP工程,在这里新建的是C语言的工程,编译用的gcc,后面会讲到怎么在C++工程里也是用OpenMP。
然后右键工程,Build Project:
接下来右键Run As:
看看输出结果吧~~
上面只是一个初步介绍,不知道有没有发现在新建工程时没有提供C++ OpenMP选项,如果要在C++工程中使用OpenMP怎么办呢?其实在新建项目的时候没有必要按照上面的要求来,可以新建一个任意的C或C++工程。只要设置编译和链接参数即可。接下来新建一个C++ HelloWorld程序并使用OpenMP。
在刚才新建项目的选项中选择Hello World C++ Project:
把源文件代码改成这样:
#include <omp.h> #include <iostream> using namespace std; int main() { omp_set_num_threads(4); #pragma omp parallel cout << "!!!Hello World!!! from thread " << omp_get_thread_num() << endl; // prints !!!Hello World!!! return 0; }
(注意"-fopenmp"和"g++"之间有个空格!)
同样,在C++链接器里也需要加入同样的参数:
OK之后就可以build项目然后运行了~~