Skip to content
Snippets Groups Projects
Commit fdef9841 authored by Pedro Gonnet's avatar Pedro Gonnet
Browse files

don't use local buffers for async send/recv. doh.

parent 17eac24a
No related branches found
No related tags found
2 merge requests!136Master,!117Engine exchange strays
......@@ -195,13 +195,14 @@ void proxy_parts_exch1(struct proxy *p) {
#ifdef WITH_MPI
/* Send the number of particles. */
int buff_out[2] = {p->nr_parts_out, p->nr_gparts_out};
if (MPI_Isend(buff_out, 2, MPI_INT, p->nodeID,
p->buff_out[0] = p->nr_parts_out;
p->buff_out[1] = p->nr_gparts_out;
if (MPI_Isend(p->buff_out, 2, MPI_INT, p->nodeID,
p->mynodeID * proxy_tag_shift + proxy_tag_count, MPI_COMM_WORLD,
&p->req_parts_count_out) != MPI_SUCCESS)
error("Failed to isend nr of parts.");
// message( "isent particle count (%i) from node %i to node %i." ,
// p->nr_parts_out , p->mynodeID , p->nodeID ); fflush(stdout);
/* message( "isent particle counts [%i, %i] from node %i to node %i." ,
p->buff_out[0], p->buff_out[1], p->mynodeID , p->nodeID ); fflush(stdout); */
/* Send the particle buffers. */
if (p->nr_parts_out > 0) {
......@@ -211,11 +212,7 @@ void proxy_parts_exch1(struct proxy *p) {
MPI_Isend(p->xparts_out, sizeof(struct xpart) * p->nr_parts_out,
MPI_BYTE, p->nodeID,
p->mynodeID * proxy_tag_shift + proxy_tag_xparts,
MPI_COMM_WORLD, &p->req_xparts_out) != MPI_SUCCESS ||
MPI_Isend(p->gparts_out, sizeof(struct gpart) * p->nr_gparts_out,
MPI_BYTE, p->nodeID,
p->mynodeID * proxy_tag_shift + proxy_tag_gparts,
MPI_COMM_WORLD, &p->req_gparts_out) != MPI_SUCCESS)
MPI_COMM_WORLD, &p->req_xparts_out) != MPI_SUCCESS)
error("Failed to isend part data.");
// message( "isent particle data (%i) to node %i." , p->nr_parts_out ,
// p->nodeID ); fflush(stdout);
......@@ -224,17 +221,21 @@ void proxy_parts_exch1(struct proxy *p) {
p->parts_out[k].id, p->parts_out[k].x[0], p->parts_out[k].x[1],
p->parts_out[k].x[2], p->parts_out[k].h, p->nodeID);*/
}
if (p->nr_gparts_out > 0) {
if (MPI_Isend(p->gparts_out, sizeof(struct gpart) * p->nr_gparts_out,
MPI_BYTE, p->nodeID,
p->mynodeID * proxy_tag_shift + proxy_tag_gparts,
MPI_COMM_WORLD, &p->req_gparts_out) != MPI_SUCCESS)
error("Failed to isend part data.");
// message( "isent gpart data (%i) to node %i." , p->nr_parts_out ,
// p->nodeID ); fflush(stdout);
}
/* Receive the number of particles. */
int buff_in[2];
if (MPI_Irecv(buff_in, 2, MPI_INT, p->nodeID,
if (MPI_Irecv(p->buff_in, 2, MPI_INT, p->nodeID,
p->nodeID * proxy_tag_shift + proxy_tag_count, MPI_COMM_WORLD,
&p->req_parts_count_in) != MPI_SUCCESS)
error("Failed to irecv nr of parts.");
p->nr_parts_in = buff_in[0];
p->nr_gparts_in = buff_in[1];
// message( "irecv particle count on node %i from node %i." , p->mynodeID ,
// p->nodeID ); fflush(stdout);
#else
error("SWIFT was not compiled with MPI support.");
......@@ -245,6 +246,10 @@ void proxy_parts_exch2(struct proxy *p) {
#ifdef WITH_MPI
/* Unpack the incomming parts counts. */
p->nr_parts_in = p->buff_in[0];
p->nr_gparts_in = p->buff_in[1];
/* Is there enough space in the buffer? */
if (p->nr_parts_in > p->size_parts_in) {
do {
......@@ -275,14 +280,19 @@ void proxy_parts_exch2(struct proxy *p) {
MPI_COMM_WORLD, &p->req_parts_in) != MPI_SUCCESS ||
MPI_Irecv(p->xparts_in, sizeof(struct xpart) * p->nr_parts_in, MPI_BYTE,
p->nodeID, p->nodeID * proxy_tag_shift + proxy_tag_xparts,
MPI_COMM_WORLD, &p->req_xparts_in) != MPI_SUCCESS ||
MPI_Irecv(p->gparts_in, sizeof(struct gpart) * p->nr_gparts_in, MPI_BYTE,
p->nodeID, p->nodeID * proxy_tag_shift + proxy_tag_gparts,
MPI_COMM_WORLD, &p->req_gparts_in) != MPI_SUCCESS)
MPI_COMM_WORLD, &p->req_xparts_in) != MPI_SUCCESS)
error("Failed to irecv part data.");
// message( "irecv particle data (%i) from node %i." , p->nr_parts_in ,
// p->nodeID ); fflush(stdout);
}
if (p->nr_gparts_in > 0) {
if (MPI_Irecv(p->gparts_in, sizeof(struct gpart) * p->nr_gparts_in, MPI_BYTE,
p->nodeID, p->nodeID * proxy_tag_shift + proxy_tag_gparts,
MPI_COMM_WORLD, &p->req_gparts_in) != MPI_SUCCESS)
error("Failed to irecv gpart data.");
// message( "irecv gpart data (%i) from node %i." , p->nr_gparts_in ,
// p->nodeID ); fflush(stdout);
}
#else
error("SWIFT was not compiled with MPI support.");
......
......@@ -59,6 +59,9 @@ struct proxy {
int nr_parts_in, nr_parts_out;
int size_gparts_in, size_gparts_out;
int nr_gparts_in, nr_gparts_out;
/* Buffer to hold the incomming/outgoing particle counts. */
int buff_out[2], buff_in[2];
/* MPI request handles. */
#ifdef WITH_MPI
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment