您的位置:首页 > 其它

并行计算MPI(一):MPI入门

2015-03-06 20:46 232 查看
这个学期老板可能让我做并行计算方面的东西并推荐MPI给我学习。私下找了一些资料,这个系列作为学习MPI的一个记录吧,所用的主要有两本书:《高性能计算并行编程技术》,都志辉,清华大学出版社;还有一本《MPI并行程序设计实例》,清华大学出版社。代码有自己写的,书上的,网上的。

说到底,MPI就是一个库,一个抽象了的库,这样在你编写多进程,多线程程序的时候不用关心底层的实现细节。提一句:这些多进程多线程知识可以参考《UNIX环境编程》。当然更重要的是,MPI可以运行在多台计算机上,其中不同计算机之间的通信MPI也做好了封装,你需要了解的是相应的高级抽象层的一点东西学会使用即可。网上有非常详细的关于MPI在VS和LINUX下的配置文章,这里给出VS的配置文章:<a target=_blank
target="_blank" href="http://wenku.baidu.com/link?url=BgnOLi2JPMP7W3rV9Ud5_ttSRn71pOjE5B4Iib5Yjoy0lCT93J0fgMr63faNMNaF_BElAUDTotV0MVB8LLj0U9RUK1-XZWQoJx3q2JeKB8_">vs下配置MPI</a><span class="wmd-input-section" style="color:rgb(90,90,90); font-family:'microsoft
yahei'; font-size:18px; line-height:29.7000007629395px; white-space:pre-wrap; outline:none!important"><span class="token pre" style="color:rgb(52,52,52); font-size:0.9em; line-height:normal; font-family:'Source Code Pro',monospace; outline:none!important">亲试配置成功。

#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);   //rank保存总共的进城数
MPI_Comm_size(MPI_COMM_WORLD, &size);   //size保存一共机器数
cout << "Thread : " << rank << "of " << size << endl;
MPI_Finalize();
return 0;
}

上面就是一个MPI程序的框架。MPI_Init()函数是用来初始化MPI环境的,MPI_Finalize()则是结束MPI环境的,和MPI_Init()是相对应的。在这两个函数中间写相应的业务逻辑代码。MPI_Comm_rank()是获得当前进城标号(进城从0开始),MPI_COMM_WORLD表示所有的通信域,简单地说就是和当前电脑当前程序相互通信的所有机器,所有程序。MPI_Comm_size()获得机器数。

#include "mpi.h"
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);   //rank保存总共的进城数
MPI_Comm_size(MPI_COMM_WORLD, &size);   //size保存一共机器数
if(0 == rank) {
//进城0需要完成的任务
} else if(1 == rank) {
//进城1需要完成的任务
}
//...
MPI_Finalize();
return 0;
}


上面的程序是以后所有的程序骨架,以后的程序基本是基于它进行增加的。比如常见的:这样不同的进程就可以做不同的事情了。至于进城之间如何通信等等就之后的文章再说明。第一次接触这个东西,慢慢来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: