Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C by sss ( 15 years ago )
#pragma comment(lib, "msmpi.lib")
#include <mpi.h>
#include <stdio.h>
#define M 27
#define MAX 100


int main (int argc, char **argv)
{
 double A[MAX][M],B[MAX],C[MAX];
 int rank,size,j,k,i,d;
 MPI_Status st;
 int r1, r2, rk;
 MPI_Init(&argc;,&argv;);
 MPI_Comm_rank(MPI_COMM_WORLD,&rank;);
 MPI_Comm_size(MPI_COMM_WORLD,&size;);
   
 int N = M/size + (rank<M%size); 

 for(i=0;i<N;i++)
 { for(j=0;j<M;j++)
 A[i][j]=1;
 B[i]=1;
 C[i]=0;
 }


 for(k=0;k<size;k++)
 {   
  rk = M/size + ((rank+k)%size<M%size);
  d=((rank+k)%size)*rk;
  printf("d=%d ",d);
  
 for(i=0;i<N;i++)
 { 
  for(j=d;j<d+rk;j++)
  C[i]+=A[i][j]*B[j-d];
 }
 r2 = M/size + (((rank+k+1)%size)<M%size);
 //printf("\n");
 //printf("send=%d recv=%d ",rk,r2);
 MPI_Send(B,rk,MPI_DOUBLE,(rank-1+size)%size,15,MPI_COMM_WORLD);
 MPI_Recv(B,r2,MPI_DOUBLE,(rank+1)%size,15,MPI_COMM_WORLD,&st;);

 }
 printf("rank=%d N=%d ",rank,N);
 for (i=0; i<N; i++)
  printf("C[%d]=%f ",i,C[i]);
 printf("\n");
 MPI_Finalize();
 return(0);

}

 

Revise this Paste

Your Name: Code Language: