我想做一个小程序,用MPI和C计算并行处理器中的特征值和特征向量。
我已经编写了一个可以正常工作的代码但是它用于uni处理器。 请帮我一些并行处理器的代码。
我想比较具有不同矩阵大小的不同处理器数量的处理时间。
请帮帮我。
我编写了这段代码,并且它适用于单处理器。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<mpi.h>
#include<time.h>
int main(int argc, char* argv[])
{
float a[1000][1000],x[1000],c[1000],d=0,temp;
int n,i,j;
double startTime;
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if(rank==0)
{
printf("Enter the order of matrix ? ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
a[i][j] = rand()%9;
}
for(i=0;i<n;i++)
x[i] = rand()%5;
}
do
{
for(i=0;i<n;i++)
{
c[i]=0;
for(j=0;j<n;j++)
c[i]+=a[i][j]*x[j];
}
for(i=0;i<n;i++)
x[i]=c[i];
temp=d;
d=0;
for(i=0;i<n;i++)
{
if(fabs(x[i])>fabs(d))
d=x[i];
}
for(i=0;i<n;i++)
x[i]/=d;
}while(fabs(d-temp)>0.00001);
if(rank==0)
{
printf("\nThe required eigen value is %f",d);
printf("\nThe required eigen vector is :\n");
for(i=0; i<n; i++)
{
printf("%f\n",x[i]);
}
printf("Time taken %f sec\n",(clock()-startTime)/CLOCKS_PER_SEC);
}
MPI_Finalize();
}