Вычислить собственное значение и собственный вектор в 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(); }