1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
#include <hpc/matvec/print.h>
#include <hpc/mpi/grid.h>
#include <hpc/mpi/gematrix.h>
#include <hpc/mpi/copy.h>
#include <mpi.h>
#include <cstdio>


int
main(int argc, char** argv)
{
    MPI_Init(&argc, &argv);

    typedef std::size_t     Index;

    hpc::mpi::Grid          grid;

    Index numRows = 10;
    Index numCols = 10;

    hpc::matvec::GeMatrix<double, Index>    A(numRows, numCols);
    hpc::matvec::GeMatrix<double, Index>    B(numRows, numCols);
    hpc::mpi::GeMatrix<double, Index>       dA(numRows, numCols, grid);

    if (grid.nodeRow==0 && grid.nodeCol==0) {
        for (Index i=0; i<numRows; ++i) {
            for (Index j=0; j<numCols; ++j) {
                A(i,j) = i + j*numRows;
            }
        }
    }

    if (grid.nodeRow==0 && grid.nodeCol==0) {
        hpc::matvec::print(A, "A");
    }

    // scatter
    hpc::mpi::copy(A, dA);

    // gather
    hpc::mpi::copy(dA, B);

    if (grid.nodeRow==0 && grid.nodeCol==0) {
        hpc::matvec::print(B, "B");
    }


    MPI_Finalize();
}