[mpich-discuss] Wrapping routines with choice buffers from Fortran

Gregor Corbin g.corbin at fz-juelich.de
Fri Feb 21 03:33:54 CST 2025


Hi Joachim,

Thanks for the hints. I handle the optional ierror argument like this:

integer :: my_ierror

call PMPI_Send(..., my_ierror)
! tool can use my_ierror

if (present(ierror)) ierror = my_ierror


If I read the test correctly, 'profile1f90.f90'  checks whether mpi_send 
and mpi_recv are intercepted by the wrappers mpi_send_f08ts and 
mpi_recv_f08ts. My problem is that the calls to pmpi_send and pmpi_recv 
in these wrappers redirect to the C MPI_ functions and then also enter 
my C wrappers.

Cheers,

Gregor


On 20.02.25 17:25, Joachim Jenke via discuss wrote:
> Sorry, the mail was intended to be PM :/ Translation inline below
>
> Am 20.02.25 um 17:16 schrieb Joachim Jenke via discuss:
>> Hallo Gregor,
>>
>> beim gucken, was es dazu in mpich so gibt bin ich darüber gestolpert:
>>
> grepping trough MPICH source I found:
>> https://github.com/pmodels/mpich/blob/main/test/mpi/f08/profile/ 
>> profile1f90.f90#L70
>>
>> Hast du den present check für ierr auf dem Schirm?
>
> Are you aware of the necessary present check?
>
> - Joachim
>>
>> - Joachim
>>
>> Am 20.02.25 um 16:56 schrieb Gregor Corbin via discuss:
>>> Hi everyone,
>>>
>>> I am developing a set of wrappers for the C and Fortran 2008 ('use 
>>> mpi_f08') bindings. The F08 wrappers are intercepting the Fortran 
>>> routines, for instance
>>>
>>>      subroutine mpi_send_f08ts_(buf, count, datatype, dest, tag, 
>>> comm, ierror)
>>>          use :: mpi_f08, only: MPI_Comm, MPI_Datatype, PMPI_Send
>>>          implicit none
>>>          ! argument declarations ...
>>>          ! wrapper code ...
>>>          call PMPI_Send(buf, count, datatype, dest, tag, comm, ierror)
>>>      end subroutine
>>>
>>>
>>> In MPICH, the call to PMPI_Send is forwarded to MPIR_Send_cdesc 
>>> which then calls MPI_Send internally. Since I also wrap MPI_Send in 
>>> C, calls from Fortran go through both wrappers, which is not 
>>> intended. This only happens for routines with choice buffers, 
>>> though. Routines without buffers call into the PMPI interface (e.g. 
>>> mpi_wait_f08_ calls MPIR_Wait_c which binds directly to PMPI_Wait). 
>>> I attached a small example that demonstrates the issue.
>>>
>>> Is this behavior intended? How can I correctly wrap these choice 
>>> buffer routines?
>>>
>>> Best,
>>>
>>> Gregor Corbin
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> discuss mailing list     discuss at mpich.org
>>> To manage subscription options or unsubscribe:
>>> https://lists.mpich.org/mailman/listinfo/discuss
>>
>>
>>
>> _______________________________________________
>> discuss mailing list     discuss at mpich.org
>> To manage subscription options or unsubscribe:
>> https://lists.mpich.org/mailman/listinfo/discuss
>
>
>
> _______________________________________________
> discuss mailing list     discuss at mpich.org
> To manage subscription options or unsubscribe:
> https://lists.mpich.org/mailman/listinfo/discuss
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4832 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.mpich.org/pipermail/discuss/attachments/20250221/0b52e250/attachment.p7s>


More information about the discuss mailing list