计算并行处理器中的特征值和特征向量

时间:2017-04-19 02:02:23

标签: c matrix mpi eigenvalue

我想做一个小程序,用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(); 
}

0 个答案:

没有答案