diff --git a/src/scheduler.c b/src/scheduler.c index 0d7c8c4754bac931c7886200176e3e9441c63c53..37fdb253e2ce48353150311c6cc2aa8612fc6ea9 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -1027,6 +1027,25 @@ void scheduler_enqueue_mapper(void *map_data, int num_elements, struct task *tasks = s->tasks; for (int ind = 0; ind < num_elements; ind++) { struct task *t = &tasks[tid[ind]]; + +#ifdef WITH_MPI + /* If this is a recv task, enqueue the MPI call. */ + if (t->type == task_type_recv) { + int err; + if (t->subtype == task_subtype_tend) { + t->buff = malloc(sizeof(int) * t->ci->pcell_size); + err = MPI_Irecv(t->buff, t->ci->pcell_size, MPI_INT, t->ci->nodeID, + t->flags, MPI_COMM_WORLD, &t->req); + } else { + err = MPI_Irecv(t->ci->parts, t->ci->count, part_mpi_type, + t->ci->nodeID, t->flags, MPI_COMM_WORLD, &t->req); + } + if (err != MPI_SUCCESS) { + mpi_error(err, "Failed to emit irecv for particle data."); + } + } +#endif + if (atomic_dec(&t->wait) == 1 && !t->skip) { scheduler_enqueue(s, t); } @@ -1160,17 +1179,17 @@ void scheduler_enqueue(struct scheduler *s, struct task *t) { break; case task_type_recv: #ifdef WITH_MPI - if (t->subtype == task_subtype_tend) { - t->buff = malloc(sizeof(int) * t->ci->pcell_size); - err = MPI_Irecv(t->buff, t->ci->pcell_size, MPI_INT, t->ci->nodeID, - t->flags, MPI_COMM_WORLD, &t->req); - } else { - err = MPI_Irecv(t->ci->parts, t->ci->count, part_mpi_type, - t->ci->nodeID, t->flags, MPI_COMM_WORLD, &t->req); - } - if (err != MPI_SUCCESS) { - mpi_error(err, "Failed to emit irecv for particle data."); - } + // if (t->subtype == task_subtype_tend) { + // t->buff = malloc(sizeof(int) * t->ci->pcell_size); + // err = MPI_Irecv(t->buff, t->ci->pcell_size, MPI_INT, t->ci->nodeID, + // t->flags, MPI_COMM_WORLD, &t->req); + // } else { + // err = MPI_Irecv(t->ci->parts, t->ci->count, part_mpi_type, + // t->ci->nodeID, t->flags, MPI_COMM_WORLD, &t->req); + // } + // if (err != MPI_SUCCESS) { + // mpi_error(err, "Failed to emit irecv for particle data."); + // } // message( "receiving %i parts with tag=%i from %i to %i." , // t->ci->count , t->flags , t->ci->nodeID , s->nodeID ); // fflush(stdout);