原始程式內容如下(多CPU版) :
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<mpi.h>
#define N 2000
void main(int argc, char* argv[])
{
int cpu_count,computer_tag;
MPI_Status status;
int mpi_id;
int flag[8];
int matrixA[N][N],vectorB[N],v[N];
int i,j,k;
int sum,temp;
time_t tbegin,tend,tspend;
int index=0;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD,&mpi_id);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
matrixA[i][j]=0;
for(i=0;i<8;i++)
flag[i]=7-i;
sum=0;temp=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
matrixA[i][j]=rand()%100+1;
}
}
for(i=0;i<N;i++)
{
vectorB[i]=rand()%100+1;
v[i]=0;
}
tbegin=time(NULL);
for(k=0;k<20;k++)
{
for(j=0;j<N;j+=8)
{
for(i=0;i<N;i++)
{
if(mpi_id==0)
v[j]=v[j]+matrixA[j+0][i]*vectorB[i];
if(mpi_id==1)
v[j+1]=v[j+1]+matrixA[j+1][i]*vectorB[i];
if(mpi_id==2)
v[j+2]=v[j+2]+matrixA[j+2][i]*vectorB[i];
if(mpi_id==3)
v[j+3]=v[j+3]+matrixA[j+3][i]*vectorB[i];
if(mpi_id==4)
v[j+4]=v[j+4]+matrixA[j+4][i]*vectorB[i];
if(mpi_id==5)
v[j+5]=v[j+5]+matrixA[j+5][i]*vectorB[i];
if(mpi_id==6)
v[j+6]=v[j+6]+matrixA[j+6][i]*vectorB[i];
if(mpi_id==7)
v[j+7]=v[j+7]+matrixA[j+7][i]*vectorB[i];
}}}
tend=time(NULL);
tspend=tend-tbegin;
if(mpi_id==0)
{
printf("Matrix is %d by %d , and cpu sped
time is %d",N,N,tspend);
}
MPI_Finalize();
}