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