并行计算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">亲试配置成功。
上面就是一个MPI程序的框架。MPI_Init()函数是用来初始化MPI环境的,MPI_Finalize()则是结束MPI环境的,和MPI_Init()是相对应的。在这两个函数中间写相应的业务逻辑代码。MPI_Comm_rank()是获得当前进城标号(进城从0开始),MPI_COMM_WORLD表示所有的通信域,简单地说就是和当前电脑当前程序相互通信的所有机器,所有程序。MPI_Comm_size()获得机器数。
上面的程序是以后所有的程序骨架,以后的程序基本是基于它进行增加的。比如常见的:这样不同的进程就可以做不同的事情了。至于进城之间如何通信等等就之后的文章再说明。第一次接触这个东西,慢慢来。
说到底,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; }
上面的程序是以后所有的程序骨架,以后的程序基本是基于它进行增加的。比如常见的:这样不同的进程就可以做不同的事情了。至于进城之间如何通信等等就之后的文章再说明。第一次接触这个东西,慢慢来。
相关文章推荐
- Windows环境下MPI并行计算联机测试配置
- MPI实现并行计算统计数据
- 方阵行列式并行化计算(OpenMP,MPI),并计算加速比
- Windows系统下搭建MPI(并行计算)环境
- 【并行计算】error C2555: 'MPI::Intercomm::Clone' : overriding virtual function differs from 'MPI::C
- 并行计算MPI研究
- MPI并行计算环境的建立
- Windows系统下搭建MPI(并行计算)环境<转>
- 并行计算学习笔记(MPI)
- 大数据并行计算利器之MPI/OpenMP
- 并行计算大作业之多边形相交(OpenMP、MPI、Java、Windows)
- 完数的MPI并行程序设计-并行计算
- 并行计算MPI [ 简单例子 ]
- MPI并行计算环境建立之二--挂载nfs文件系统
- MPI实现fft的迭代算法 源于并行计算——结构。算法。编程中伪码 更新1
- 最近做了个并行的计算各项异性地震波的有限元程序(cuda+mpi),可以计算超大规模问题,网格点个数可以几百亿都没有问题.
- 并行计算mpi [ PI ]
- MPI并行计算环境建立之一--配置前的准备工作
- MPI并行计算环境搭建以及集群测试
- ubuntu下搭建MPI并行计算环境