Skip to content

Commit f3cc465

Browse files
committed
ajout de la fonction MPI_Ibarrier pour l'interposition Fortran
1 parent 522bf38 commit f3cc465

File tree

1 file changed

+57
-1
lines changed

1 file changed

+57
-1
lines changed

src/interpolf.c

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ static void MPI_Barrier_fortran_wrapper(MPI_Fint *comm, MPI_Fint *ierr) {
459459
int _wrap_py_return_val = 0;
460460

461461
Tsc const tsc = rdtsc();
462-
462+
463463
#if (!defined(MPICH_HAS_C2F) && defined(MPICH_NAME) && (MPICH_NAME == 1)) /* MPICH test */
464464
_wrap_py_return_val = PMPI_Barrier((MPI_Comm)(*comm));
465465
#else /* MPI-2 safe call */
@@ -505,4 +505,60 @@ _EXTERN_C_ void mpi_barrier_(MPI_Fint *comm, MPI_Fint *ierr) {
505505

506506
_EXTERN_C_ void mpi_barrier__(MPI_Fint *comm, MPI_Fint *ierr) {
507507
MPI_Barrier_fortran_wrapper(comm, ierr);
508+
}
509+
510+
511+
static void MPI_Ibarrier_fortran_wrapper(MPI_Fint *comm, MPI_Fint *request, MPI_Fint *ierr) {
512+
int _wrap_py_return_val = 0;
513+
514+
Tsc const tsc = rdtsc();
515+
516+
#if (!defined(MPICH_HAS_C2F) && defined(MPICH_NAME) && (MPICH_NAME == 1)) /* MPICH test */
517+
_wrap_py_return_val = PMPI_Ibarrier((MPI_Comm)(*comm), (MPI_Request*)request);
518+
#else /* MPI-2 safe call */
519+
MPI_Request temp_request;
520+
temp_request = MPI_Request_f2c(*request);
521+
_wrap_py_return_val = PMPI_Ibarrier(MPI_Comm_f2c(*comm), &temp_request);
522+
*request = MPI_Request_c2f(temp_request);
523+
#endif /* MPICH test */
524+
525+
Tsc const duration = rdtsc() - tsc;
526+
527+
MpiCall const ibarrier = {
528+
.kind = Ibarrier,
529+
.time = -1.0,
530+
.tsc = tsc,
531+
.duration = duration,
532+
.current_rank = current_rank,
533+
.partner_rank = -1,
534+
.nb_bytes_s = 0,
535+
.nb_bytes_r = 0,
536+
.comm = PMPI_Comm_c2f((MPI_Comm)comm),
537+
.req = *request,
538+
.tag = -1,
539+
.required_thread_lvl = -1,
540+
.provided_thread_lvl = -1,
541+
.op_type = -1,
542+
.finished = false,
543+
};
544+
545+
register_mpi_call(ibarrier);
546+
547+
*ierr = _wrap_py_return_val;
548+
}
549+
550+
_EXTERN_C_ void MPI_IBARRIER(MPI_Fint *comm, MPI_Fint *request, MPI_Fint *ierr) {
551+
MPI_Ibarrier_fortran_wrapper(comm, request, ierr);
552+
}
553+
554+
_EXTERN_C_ void mpi_ibarrier(MPI_Fint *comm, MPI_Fint *request, MPI_Fint *ierr) {
555+
MPI_Ibarrier_fortran_wrapper(comm, request, ierr);
556+
}
557+
558+
_EXTERN_C_ void mpi_ibarrier_(MPI_Fint *comm, MPI_Fint *request, MPI_Fint *ierr) {
559+
MPI_Ibarrier_fortran_wrapper(comm, request, ierr);
560+
}
561+
562+
_EXTERN_C_ void mpi_ibarrier__(MPI_Fint *comm, MPI_Fint *request, MPI_Fint *ierr) {
563+
MPI_Ibarrier_fortran_wrapper(comm, request, ierr);
508564
}

0 commit comments

Comments
 (0)