Skip to content

Commit 522bf38

Browse files
committed
ajout de la fonction MPI_Barrier pour l'interposition Fortran
1 parent 3ea5796 commit 522bf38

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

src/interpolf.c

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,4 +452,57 @@ _EXTERN_C_ void mpi_irecv_(MPI_Fint *buf, MPI_Fint *count, MPI_Fint *datatype, M
452452

453453
_EXTERN_C_ void mpi_irecv__(MPI_Fint *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *source, MPI_Fint *tag, MPI_Fint *comm, MPI_Fint *request, MPI_Fint *ierr) {
454454
MPI_Irecv_fortran_wrapper(buf, count, datatype, source, tag, comm, request, ierr);
455+
}
456+
457+
458+
static void MPI_Barrier_fortran_wrapper(MPI_Fint *comm, MPI_Fint *ierr) {
459+
int _wrap_py_return_val = 0;
460+
461+
Tsc const tsc = rdtsc();
462+
463+
#if (!defined(MPICH_HAS_C2F) && defined(MPICH_NAME) && (MPICH_NAME == 1)) /* MPICH test */
464+
_wrap_py_return_val = PMPI_Barrier((MPI_Comm)(*comm));
465+
#else /* MPI-2 safe call */
466+
_wrap_py_return_val = PMPI_Barrier(MPI_Comm_f2c(*comm));
467+
#endif /* MPICH test */
468+
469+
Tsc const duration = rdtsc() - tsc;
470+
471+
MpiCall const barrier = {
472+
.kind = Barrier,
473+
.time = -1.0,
474+
.tsc = tsc,
475+
.duration = duration,
476+
.current_rank = current_rank,
477+
.partner_rank = -1,
478+
.nb_bytes_s = 0,
479+
.nb_bytes_r = 0,
480+
.comm = PMPI_Comm_c2f((MPI_Comm)comm),
481+
.req = -1,
482+
.tag = -1,
483+
.required_thread_lvl = -1,
484+
.provided_thread_lvl = -1,
485+
.op_type = -1,
486+
.finished = false,
487+
};
488+
489+
register_mpi_call(barrier);
490+
491+
*ierr = _wrap_py_return_val;
492+
}
493+
494+
_EXTERN_C_ void MPI_BARRIER(MPI_Fint *comm, MPI_Fint *ierr) {
495+
MPI_Barrier_fortran_wrapper(comm, ierr);
496+
}
497+
498+
_EXTERN_C_ void mpi_barrier(MPI_Fint *comm, MPI_Fint *ierr) {
499+
MPI_Barrier_fortran_wrapper(comm, ierr);
500+
}
501+
502+
_EXTERN_C_ void mpi_barrier_(MPI_Fint *comm, MPI_Fint *ierr) {
503+
MPI_Barrier_fortran_wrapper(comm, ierr);
504+
}
505+
506+
_EXTERN_C_ void mpi_barrier__(MPI_Fint *comm, MPI_Fint *ierr) {
507+
MPI_Barrier_fortran_wrapper(comm, ierr);
455508
}

0 commit comments

Comments
 (0)