?? mpi.cpp
字號:
#include <iostream.h>
#include<stdio.h>
#include <mpi.h>
#define totalsize 256
#define mysize (totalsize/4)
void main(int argc,char *argv[])
{
int steps=13;
int myid,numprocs,i,j,n;
float a[mysize+2][totalsize];
float b[mysize+2][totalsize];
int begin_row;
int end_row;
int top,down;
int tag1,tag2;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
cout<< "Process "<<' '<<myid<<' '<< " of "<<' '<< numprocs<<' '<< " is alive"<<endl;
for(i=0;i<mysize+2;i++)
{
for(j=0;j<totalsize;j++)
{
a[i][j]=0.0;
}
}
for(i=0;i<totalsize;i++)
{
a[1][i]=8.0;
a[mysize][i]=8.0;
}
tag1=3;
tag2=4;
if(myid>0)
{
top=myid-1;
}
else
{
top=MPI_PROC_NULL;
}
if(myid<3)
{
down=myid+1;
}
else
{
down=MPI_PROC_NULL;
}
for(n=0;n<steps;n++)
{
MPI_Sendrecv(&a[1][0], totalsize, MPI_FLOAT, top, tag1,& a[mysize+1][0],totalsize, MPI_FLOAT, down, tag1, MPI_COMM_WORLD, &status );/*向上數(shù)據(jù)傳送*/
begin_row=1;
MPI_Sendrecv(&a[mysize][0], totalsize, MPI_FLOAT, down, tag2,& a[0][0],totalsize, MPI_FLOAT, top, tag2,MPI_COMM_WORLD, &status );/*向下數(shù)據(jù)傳送*/
end_row=mysize;
if(myid==0)
{
begin_row=2;
}
if(myid==3)
{
end_row=mysize-1;
}
for(i=begin_row;i<=end_row;i++)
for(j=1;j<=totalsize;j++)
b[i][j]=(a[i][j+1]+a[i][j-1]+a[i+1][j]+a[i-1][j])*0.25;
for(i=begin_row;i<=end_row;i++)
for(j=1;j<=totalsize;j++)
a[i][j]=b[i][j];
}
if(myid==1)
{
for(i=mysize-8;i<mysize;i++)
{
for(j=1;j<=4;j++)
{
printf("%f ",a[i][j]);
}
cout<<endl;
}
}
MPI_Finalize();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -