Bhola Ram Sahu Ответов: 0

Вычислить собственное значение и собственный вектор в MPI


Я хочу сделать небольшую программу, которая вычисляет собственное значение и собственный вектор в параллельных процессорах с использованием MPI.

Я написал код, который работает правильно, но он предназначен для процессора 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 Ответов