Как правильно вывести матрицу, строки которой поровну разделены между процессами (mpi.h)?
Пытаюсь написать программу с использованием MPI, в которой создается матрица и заполняется случайными числами в нулевом процессе. Затем строки матрицы разделяются между процессами и каждый процесс должен вывести свою строку. Но правильно выводится только матрица, хранящаяся в 0 процессе. В остальных процессах выводятся непонятные значения. Где ошибка и как ее исправить?
#include "mpi.h"
#include <iostream>
#include <sys/time.h>
int commsize, rank;
int main(int argc, char **argv) {
int **Matrix;
int Size = 6;
int *StringProc; // Строки матрицы для текущего процесса
int NumStringProc; // Число строк для текущего процесса
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &commsize);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Bcast(&Size, 1, MPI_INT, 0, MPI_COMM_WORLD);
NumStringProc = Size / commsize;
StringProc = new int[Size * NumStringProc];
if (rank == 0) {
Matrix = new int *[Size];
for (int i = 0; i < Size; i++) {
Matrix[i] = new int[Size];
}
for (int i = 0; i < Size; i++) {
for (int j = 0; j < Size; j++) {
Matrix[i][j] = random() % 99;
}
}
}
MPI_Scatter(Matrix, NumStringProc * Size, MPI_INT, StringProc,
NumStringProc * Size, MPI_INT, 0, MPI_COMM_WORLD);
for (int i = 0; i < commsize; i++) {
if (rank == i) {
std::cout << "rank: " << rank << std::endl;
for (int i = 0; i < Size; i++) {
for (int j = 0; j < Size; j++) {
std::cout << Matrix[i][j] << " ";
}
std::cout << std::endl;
}
}
}
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
return 0;
}