Raimurka
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору MPI только начали учить..литературы мало...а проги требуют..че то вроде как должно было бы работать...но -нет!!!помогите пожалуйста..что тут не так. даны две квадратные матрицы и их нужно перемножить на p процессах(в данном примере пока пользую 2 процесса с 2X2 матрицой) MPI_Bcast ом передаю матрицу one по разным процессам,куски перемножаю,а ответ собираю "совком" Gather...вот код [code]#include <iostream> #include <mpi.h> using namespace std; int main(int argc, char *argv[]) { const int n = 2; int one[n][n] = {{2,3}, {5,-7}}; int two[n][n]= {{-1,2}, {-2,3}}; int answ[n][n]; int a[n][n]; int i, j, o, x,i1,i2,k; int rank,size; MPI_Status st; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD,&rank); /* if (rank==0){ cout<<"\nVvedite pervuyu matritcu: \n"; for(i=0;i<n;i++){ for(j=0; j<n; j++) cin>>one[i][j]; } cout<<"Vvedite vtoruyu matritcu: \n"; for (i=0; i<n; i++) { for (j=0; j<n; j++) cin>>two[i][j]; } }*/ MPI_Bcast(one, n*n, MPI_INT, 0, MPI_COMM_WORLD); k = n / size; i1 = k * rank; i2 = (k * rank)+1 ; if ( rank == size-1 ) i2 = n; for (i=i1; i<i2; i++) for (j=0; j<n; j++) { x=0; for (o=0; o<n; o++) x=x+(one[i][o])*(two[o][j]); answ[i][j]=x; cout<<" x: "<<answ[i][j]<<" rank : "<<rank; } MPI_Gather(&answ,n*n,MPI_INT,&a,n*n,MPI_INT,0,MPI_COMM_WORLD); if ( rank == 0 ) { cout<<"Proizvedenie matritc ravno: \n"; for (i=0; i<n; i++) { for (j=0; j<n; j++) cout<<a[i][j]<<" "; cout<<endl; } } MPI_Finalize(); return 0; } [code] И вот че получается x: -8 rank : 0 x: 13 rank : 0Proizvedenie matritc ravno: -8 13 -858993460 -858993460 x: 9 rank : 1 x: -11 rank : 1 видите...массив заполнен...а вывести полностью матрицу он не может.тока до половины! помогите чем можете плиз!!! |