linux并行环境搭建,Linux下MPI并行编程环境搭建配置

Process 0 of 10 is on server150 Process 1 of 10 is on server150 Process 4 of 10 is on server140 Process 5 of 10 is on server140 Process 6 of 10 is on server143 Process 7 of 10 is on server143 Process 8 of 10 is on server130 Process 9 of 10 is on server130 Process 2 of 10 is on server151 Process 3 of 10 is on server151 pi is approximately 3.1415926544231256, Error is 0.0000000008333325 wall clock time = 0.018768

两个demo程序(windows下的程序)

#include "mpi.h"

#include

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<

MPI_Finalize();

return 0;

}

编译: mpicxx -o test_mpi test_mpi.cpp

执行:mpirun -n 2 ./test_mpi

2.计算矩阵和

#include "mpi.h" #include #include 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<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值