Я пытаюсь выполнить Matrix Transpose для матрицы 4x4, используя технику разделения строк в MPI.
У меня есть две матрицы. Matrix A имеет входную матрицу, где, как и в Matrix BI, необходимо сохранить результирующую матрицу после транспонирования.
Я выполняю следующие шаги:
1.) Initializing Apart[N/P][N] (To partition rows of Matrix A among P processes)
2.) Initializing Bpart[N][N/p] (To partition Column of Matrix B among P processes)
3.) Computation (Bpart[i][j]=Apart[j][i])
4.) Gather the result in process 0.
Хотя все работает нормально, кроме моего последнего звонка.Я выполняю свой результат среди 4 процессов.Конечный результат такой же, как входная матрица.Я мог бы хотеть использовать сбор отдельно для каждой строки Bpart, но мне нужна помощь, как я могу достичь этогоНиже мой код,
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[])
{
int myrank, procs, n = 4;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &procs);
int aPart[n/procs][n];
int bPart[n][n/procs];
int a[n][n];
int b[n][n];
if(myrank == 0)
{
int temp = 0;
for(int i=0; i<n; i++) {
for(int j=0;j<n;j++) {
a[i][j] = temp;
temp++;
}
}
/*
printf("Two Dimensional array elements:\n");
for(int i=0; i<n; i++) {
for(int j=0;j<n;j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}*/
}
MPI_Scatter(&a,(n * (n/procs)),MPI_INT,&aPart,(n * (n/procs)),MPI_INT,0,MPI_COMM_WORLD);
printf("%d \n",myrank);
for(int i=0; i<n; i++) {
for(int j=0;j< n/procs ;j++) {
bPart[i][j] = aPart[j][i];
}
}
printf("\n");
for(int i=0; i<n/procs; i++) {
for(int j=0;j<n;j++) {
printf("%d ", bPart[i][j]);
}
}
printf("\n");
MPI_Gather(bPart,(n * (n/procs)),MPI_INT,b,(n * (n/procs)),MPI_INT,0,MPI_COMM_WORLD);
if(myrank == 0)
{
printf("B \n");
for(int i=0; i<n; i++) {
for(int j=0;j<n;j++) {
printf("%d ", b[i][j]);
}
printf("\n");
}
}
MPI_Finalize();
return 0;
}