Как правильно вывести матрицу, строки которой поровну разделены между процессами (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;
}

Ответы (0 шт):