⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpi.cpp

📁 MPI实现四个进程以上的Jacobi迭代,进行连续四次迭代后选择两进程所处理数据交界处8×8子矩阵进行输出
💻 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 );/*向上数据传送*/
	   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 );/*向下数据传送*/
	   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();

}
			   

	  


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -