C ++ MPI_Reduce строки матрицы - PullRequest
0 голосов
/ 23 октября 2019

Я новичок в 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;
}```


...