Я новичок в MPI и пытаюсь выполнить глобальную операцию сокращения для моей матрицы. Я сделал сокращение, используя материалы, которые я нашел. Но я хочу сделать это не сгенерированными одномерными массивами, а со случайно заполненными строками 2D-матриц.
Я не смог найти материалы для сокращения и матрицы.
#include <iostream>
#include <stdio.h>
#include "mpi.h"
#include <time.h>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
int rank, size;
double sum = 0;
if (MPI_Init(&argc, &argv) != MPI_SUCCESS) {
perror("Error initializing MPI");
exit(1);
}
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
int sendbuf[size] = { 0 };
int recvbuf[size] = { 0 };
for (int i = 0; i < size; i++)
sendbuf[i] = 1 + rank + size * i;
printf("Initial %d: ", rank);
for (int i = 0; i < size; i++) printf("%d ", sendbuf[i]);
printf("\n");
MPI_Reduce(&sendbuf, &recvbuf, size, MPI_INT,
MPI_SUM, 0, MPI_COMM_WORLD);
// if I have a matrix A[4][4], I want smth like:
// for(int i = 0; i < rows_number; i++)
// MPI_Reduce(&A[i], &recvbuf, size, MPI_INT,
// MPI_SUM, 0, MPI_COMM_WORLD);
if (rank == 0) {
for (int i = 0; i < size; i++)
cout << "Reduced = " << recvbuf[i] << endl;
}
MPI_Finalize();
return 0;
}```