mpi编程入门之helloworld
2013-01-31 15:18
197 查看
1. mpi简介
2. hello world
3. 计算矩阵和
4. 参考资料
1. mpi简介
mpi=(Message Passing Interface)目前一种比较著名的应用于并行环境的消息传递标准。mpich为实现mpi接口开源框架。
2. hello world
编译: mpicxx -o test_mpi test_mpi.cpp
执行:mpirun -n 2 ./test_mpi
3. 计算矩阵和
http://pan.baidu.com/share/link?shareid=257262&uk=908463093 http://hi.baidu.com/motioo/item/9bbc649efbed64de1f427122
代码http://pan.baidu.com/share/link?shareid=257270&uk=908463093
2. hello world
3. 计算矩阵和
4. 参考资料
1. mpi简介
mpi=(Message Passing Interface)目前一种比较著名的应用于并行环境的消息传递标准。mpich为实现mpi接口开源框架。
2. hello world
#include "mpi.h" #include <iostream> int main(int argc, char* argv[]) { int rank; int size; MPI_Init(0,0); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); std::cout<<"Hello world from process "<<rank<<" of "<<size<<std::endl; MPI_Finalize(); return 0; }
编译: mpicxx -o test_mpi test_mpi.cpp
执行:mpirun -n 2 ./test_mpi
3. 计算矩阵和
#include "mpi.h" #include <iostream> #include <fstream> int main(int argc, char* argv[]) { using namespace std; int rank; int size; MPI_Status Status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); const int MAXX=8; const int MAXY=3; const int MAXPROCESSOR=64; float Data[MAXX][MAXX]; int ArraySize[2]; int i,j,k; if (rank == 0) { ifstream in("input.txt"); in>>ArraySize[0]>>ArraySize[1]; for (i=1; i<=ArraySize[0]; i++ ) { for (j=1; j<=ArraySize[1]; j++) { in>>Data[i][j]; } } } MPI_Bcast(ArraySize,2,MPI_INT,0,MPI_COMM_WORLD); int AverageLineNumber,HeavyProcessorNumber,MyLineNumber; int CurrentLine,StartLine,SendSize; float SendArray[MAXX*MAXY]; AverageLineNumber=ArraySize[0] / size; HeavyProcessorNumber=ArraySize[0] % size; if (rank < HeavyProcessorNumber) { MyLineNumber=AverageLineNumber+1; } else { MyLineNumber=AverageLineNumber; } if (rank == 0) { CurrentLine=ArraySize[0]; for (i=size-1; i >= 0; i--) { SendSize=0; if (i < HeavyProcessorNumber) StartLine=CurrentLine-AverageLineNumber; else StartLine=CurrentLine-AverageLineNumber+1; for (j=StartLine; j <= CurrentLine; j++) for (k=1; k <= ArraySize[1]; k++) SendArray[SendSize++]=Data[j][k]; if (i != 0) MPI_Send(SendArray,SendSize, MPI_FLOAT,i,10,MPI_COMM_WORLD); CurrentLine=StartLine-1; } } else { MPI_Recv(SendArray,MyLineNumber*ArraySize[1], MPI_FLOAT,0,10,MPI_COMM_WORLD,&Status); } float *Sum=new(float); *Sum=0; for (i=0; i < MyLineNumber*ArraySize[1]; i++) *Sum+=SendArray[i]; float AllSum[MAXPROCESSOR]; std::cout << "rank:" << rank << " cal sum is " << *Sum << std::endl; MPI_Gather(Sum,1,MPI_FLOAT,AllSum,1,MPI_FLOAT,0,MPI_COMM_WORLD); if (rank == 0) { *Sum=0; for (i=0; i < size; i++) *Sum+=AllSum[i]; cout<<"The Sum of the Array is:"<<*Sum<<endl; } MPI_Finalize(); return 0; }4. 参考资料
http://pan.baidu.com/share/link?shareid=257262&uk=908463093 http://hi.baidu.com/motioo/item/9bbc649efbed64de1f427122
代码http://pan.baidu.com/share/link?shareid=257270&uk=908463093
相关文章推荐
- Unix/Linux环境C编程入门教程(21) 各个系统HelloWorld跑起来效果如何?
- 内核模块编程---helloworld简单入门程序(1)
- Linux脚本(shell)编程(一) 简单入门HelloWorld
- Java编程eclipse +JDK 编程入门之创建HelloWorld !
- GTK编程基础---入门篇(helloworld)
- jni 入门 android的C编程之旅 --->环境搭建&&helloworld
- 漫谈并发编程:用MPI进行分布式内存编程(入门篇)
- jni 入门 android的C编程之旅 --->环境搭建&&helloworld
- Android编程入门之HelloWorld项目目录结构分析
- C语言编程入门——HelloWorld!
- Linux脚本(shell)编程(一) 简单入门HelloWorld
- Linux脚本(shell)编程(一) 简单入门HelloWorld
- Unix/Linux环境C编程入门教程(21) 各个系统HelloWorld跑起来效果如何?
- Linux下C语言编程入门-2关于进程和用户信息
- Spring的学习(二):入门HelloWorld
- 命名空间和模块化编程3 - C++快速入门41
- Linux简介及常用命令使用5--linux shell编程入门
- Android入门之环境搭建-helloworld
- VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构
- java-socket编程_ 1.socket入门