<div dir="ltr">I failed to compile MPICH2 from its source in VS 2005. Could the develop team provide a debug version? Thus we can use a simple fortran app to inspect the real case: set a breakpoint on MPI_BCAST() and print the callstack.<br>
<br>Best<br><br>Andrew<br><br><div class="gmail_quote">On Thu, Jul 31, 2008 at 9:17 AM, Ruini Xue <span dir="ltr">&lt;<a href="mailto:xueruini@gmail.com">xueruini@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div dir="ltr">Here is a link which illustrate this topic: <a href="http://www.netlib.org/utk/papers/mpi-book/node190.html" target="_blank">http://www.netlib.org/utk/papers/mpi-book/node190.html</a><br><br>All C version MPI_XXXX() are defined as *weak symbols* to PMPI_XXXX(), which means that if there is no MPI_XXX() definition, the<br>

user application would use the coresponding PMPI_XXX(). The figure also shows that in normal case (without profiling), PMPI_Bcast()<br>do all the real work (see MPI_Bcast()---&gt;PMPI_Bcast()) because MPI_Bcast() is not defined yet, otherwise (with profiling), since MPI_Send() is provided by the profiling lib, use app would be linked to the MPI_Send() in profiling lib, which in turn calls the original PMPI_Send(). So, I think it&#39;s PMPI_XXX() do all the work internally, both C and Fortran bindings calls PMPI_XXX().<br>

<br>Now let check code. There a piece of code from: src/mpi/pt2pt/bsend.c<br>///////////////////////////////////////////////////////////<br>/* -- Begin Profiling Symbol Block for routine MPI_Bsend */<br>#if defined(HAVE_PRAGMA_WEAK)<br>

#pragma weak MPI_Bsend = PMPI_Bsend<br>#elif defined(HAVE_PRAGMA_HP_SEC_DEF)<br>#pragma _HP_SECONDARY_DEF PMPI_Bsend&nbsp; MPI_Bsend<br>#elif defined(HAVE_PRAGMA_CRI_DUP)<br>#pragma _CRI duplicate MPI_Bsend as PMPI_Bsend<br>#endif<br>

/* -- End Profiling Symbol Block */<br><br>/* Define MPICH_MPI_FROM_PMPI if weak symbols are not supported to build<br>&nbsp;&nbsp; the MPI routines */<br>#ifndef MPICH_MPI_FROM_PMPI<br>#undef MPI_Bsend<br>#define MPI_Bsend PMPI_Bsend<br>

<br>#endif<br><br>#undef FUNCNAME<br>#define FUNCNAME MPI_Bsend<br>//////////////////////////////////////////////////////////////////////////<br><br>It seems that if #pragma weak is supported, MPI_Bsend is weakly defined to PMPI_Bsend, otherwise MPI_Bsend is defined to<br>

PMPI_Bsend via macro. That&#39;s to say, MPI_Bsend always does nothing, but is mapped to PMPI_Bsend. This is the C binding version.<br><br>For fortran binding, check src/binding/f77/bsendf.c:<br>//////////////////////////////////////////////////////////////////////<br>

FORT_DLL_SPEC void FORT_CALL mpi_bsend_ ( void*v1, MPI_Fint *v2, MPI_Fint *v3, MPI_Fint *v4, MPI_Fint *v5, MPI_Fint *v6, MPI_Fint *ierr ){<br>&nbsp;&nbsp;&nbsp; *ierr = MPI_Bsend( v1, *v2, (MPI_Datatype)(*v3), *v4, *v5, (MPI_Comm)(*v6) );<br>

}<br>/////////////////////////////////////////////////////////////////////<br><br>It seems that the fortran binding calls the C binding directly, but actually MPI_Bsend() is PMPI_Bsend().<br><br>I am not sure whether I describe and analysis it accurately.<br>

<br><br>Best<br><br>Andrew <br><div><div></div><div class="Wj3C7c"><br><div class="gmail_quote">On Thu, Jul 31, 2008 at 2:11 AM, Jayesh Krishna <span dir="ltr">&lt;<a href="mailto:jayesh@mcs.anl.gov" target="_blank">jayesh@mcs.anl.gov</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">







<div>


<p><font size="2"><div>&gt;&gt; Looks like the Fortran interface does call the MPI version of the C function.<br>
<br></div>
&nbsp; Only if the call is from PMPI_* funcs. (If the MPI call is not from PMPI, MPI_* funcs get defined to PMPI_*)<br>
<br>
&gt;&gt; If the fortran binding calls PMPI version of C function...<br>
<br>
&nbsp; In windows this currently does not work (I guess, it is due to the different calling convention/name mangling by the mpe lib and the fortran lib in windows) :( Defenitely a TODO item :)<br>
<br>
Regards,<br><font color="#888888">
Jayesh</font><div><br>
<br>
-----Original Message-----<br>
From: <a href="mailto:owner-mpich-discuss@mcs.anl.gov" target="_blank">owner-mpich-discuss@mcs.anl.gov</a> [<a href="mailto:owner-mpich-discuss@mcs.anl.gov" target="_blank">mailto:owner-mpich-discuss@mcs.anl.gov</a>] On Behalf Of Rajeev Thakur<br>


Sent: Wednesday, July 30, 2008 12:42 PM<br>
To: <a href="mailto:mpich-discuss@mcs.anl.gov" target="_blank">mpich-discuss@mcs.anl.gov</a><br></div><div><div></div><div>
Subject: RE: [mpich-discuss] How does the fortran binding work?<br>
<br>
Looks like the Fortran interface does call the MPI version of the C function.<br>
<br>
<br>
&gt; -----Original Message-----<br>
&gt; From: <a href="mailto:owner-mpich-discuss@mcs.anl.gov" target="_blank">owner-mpich-discuss@mcs.anl.gov</a><br>
&gt; [<a href="mailto:owner-mpich-discuss@mcs.anl.gov" target="_blank">mailto:owner-mpich-discuss@mcs.anl.gov</a>] On Behalf Of Anthony Chan<br>
&gt; Sent: Wednesday, July 30, 2008 12:01 PM<br>
&gt; To: <a href="mailto:mpich-discuss@mcs.anl.gov" target="_blank">mpich-discuss@mcs.anl.gov</a><br>
&gt; Subject: Re: [mpich-discuss] How does the fortran binding work?<br>
&gt;<br>
&gt; If the fortran binding calls PMPI version of C function, can the<br>
&gt; fortran MPI program still be profiled ?<br>
&gt;&nbsp;<br>
&gt; ----- &quot;Rajeev Thakur&quot; &lt;<a href="mailto:thakur@mcs.anl.gov" target="_blank">thakur@mcs.anl.gov</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; The Fortran binding calls the PMPI version of the C function.<br>
&gt; &gt;<br>
&gt; &gt; Rajeev<br>
&gt; &gt;<br>
&gt; &gt; &gt; -----Original Message-----<br>
&gt; &gt; &gt; From: <a href="mailto:owner-mpich-discuss@mcs.anl.gov" target="_blank">owner-mpich-discuss@mcs.anl.gov</a><br>
&gt; &gt; &gt; [<a href="mailto:owner-mpich-discuss@mcs.anl.gov" target="_blank">mailto:owner-mpich-discuss@mcs.anl.gov</a>] On Behalf Of Anthony Chan<br>
&gt; &gt; &gt; Sent: Wednesday, July 30, 2008 9:46 AM<br>
&gt; &gt; &gt; To: <a href="mailto:mpich-discuss@mcs.anl.gov" target="_blank">mpich-discuss@mcs.anl.gov</a><br>
&gt; &gt; &gt; Cc: <a href="mailto:mpich-discuss@mcs.anl.gov" target="_blank">mpich-discuss@mcs.anl.gov</a><br>
&gt; &gt; &gt; Subject: Re: [mpich-discuss] How does the fortran binding work?<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; No.&nbsp; PMPI is the MPI profiling interface and is standardized by<br>
&gt; &gt; &gt; the MPI forum.<br>
&gt; &gt; &gt; Fortran/C++ MPI binding just calls the C MPI routine.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; A.Chan<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; ----- &quot;Ruini Xue&quot; &lt;<a href="mailto:xueruini@gmail.com" target="_blank">xueruini@gmail.com</a>&gt; wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; On Wed, Jul 30, 2008 at 8:54 PM, Dave Goodell &lt;<br>
&gt; &gt; &gt; <a href="mailto:goodell@mcs.anl.gov" target="_blank">goodell@mcs.anl.gov</a> &gt;<br>
&gt; &gt; &gt; &gt; wrote:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hi Andrew,<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Yes, the fortran and c++ bindings are just wrappers over the C<br>
&gt; &gt; &gt; &gt; bindings. The C binding implements the functionality directly.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Are they wrappers of MPI_XXX() or PMPI_XXX()?<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Best<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Andrew<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; -Dave<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; On Jul 30, 2008, at 6:11 AM, Ruini Xue wrote:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hello, everyone,<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I am working with MPICH2 on Windows platfrom. The fortran MIP<br>
&gt; &gt; &gt; &gt; application is linked to fmpich.lib, and fmpich2.dll is<br>
&gt; loaded in<br>
&gt; &gt; &gt; &gt; runtime, which in turn loads mipch2mpi.dll.<br>
&gt; &gt; &gt; &gt; mpich2mpi.dll contains all MPI APIs which exported C<br>
&gt; &gt; &gt; interface. What I<br>
&gt; &gt; &gt; &gt; want to know is: what is the &#39;underlying&#39; relation between<br>
&gt; &gt; &gt; fmpich2.dll<br>
&gt; &gt; &gt; &gt; and mpich2mip.dll? Do all<br>
&gt; &gt; &gt; &gt; Fortran MPI calls are converted to c bindings in mpich2mpi.dll?<br>
&gt; &gt; For<br>
&gt; &gt; &gt; &gt; example, does MPI_BCAST() in fmich2.dll directly calls<br>
&gt; &gt; &gt; MPI_Bcast() in<br>
&gt; &gt; &gt; &gt; mpich2mpi.dll? Is MPI_BCAST() just a stub while MPI_Bcast() do<br>
&gt; &gt; the<br>
&gt; &gt; &gt; &gt; real job?<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Thanks<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Andrew<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></font>
</p>

</div>
</blockquote></div><br></div></div></div>
</blockquote></div><br></div>