#include <mpi.h> #include <vector> #include <iostream> #include "datastructures/Body.hpp" typedef struct _A { int num; float x; double data[4]; } A; using namespace nbody; using namespace std; int main(int argc, char** argv) { int blocklengths[3] = {1, 1, 4}; MPI::Datatype datatypes[3] = {MPI::INT, MPI::FLOAT, MPI::DOUBLE}; MPI::Aint displacements[3]; MPI::Datatype restype = MPI::DATATYPE_NULL; MPI::Aint intex; MPI::Aint floatex; MPI::Aint intlb; MPI::Aint floatlb; MPI::Init(argc, argv); datatypes[0].Get_extent(intlb, intex); datatypes[1].Get_extent(floatlb, floatex); displacements[0] = (MPI::Aint) 0; displacements[1] = intex; displacements[2] = intex + floatex; restype = restype.Create_struct(3, blocklengths, displacements, datatypes); restype.Commit(); A a[4]; if (MPI::COMM_WORLD.Get_rank() == 0) { for (int j = 0; j < 4; j++) { a[j].num = j * 10.0 + 1; a[j].x = j * 10.0 + 2.0; for (int i = 0; i < 4; i++) { a[j].data[i] = j * 10.0 + a[j].x + 1 + i; } } MPI::COMM_WORLD.Send(&a[0], 4, restype, 1, 0); } else if (MPI::COMM_WORLD.Get_rank() == 1) { MPI::COMM_WORLD.Recv(&a[0], 4, restype, 0, 0); for (int j = 0; j < 4; j++) { cout << a[j].num << " " << a[j].x << " "; for (int i = 0; i < 4; i++) { cout << a[j].data[i] << " "; } cout << endl; } } MPI::Finalize(); /* if (MPI::COMM_WORLD.Get_rank() == 0) { for (int i = 0; i < 16; i++) { Body b((double) i, (double) i, (double) i); data[i] = b; } if (MPI::COMM_WORLD.Get_rank() == 0) { for (int i = 0; i < 16; i++) { cout << MPI::COMM_WORLD.Get_rank() << " " << data[i].position[0] << endl; } } } else { for (int i = 0; i < 16; i++) { Body b((double) 0, (double) 0, (double) 0); data[i] = b; } if (MPI::COMM_WORLD.Get_rank() != 0) { for (int i = 0; i < 16; i++) { cout << MPI::COMM_WORLD.Get_rank() << " " << data[i].position[0] << endl; } } } */ return 0; }