原始程式內容如下(多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();
}