<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="FR" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I’m sorry but the MPI_User_function is not always invoked by the thread that invokes the MPI function that uses it. When you have progression thread,
 the MPI_User_function may be called by this additional thread. <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Marc<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">De :</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> mpi-forum-bounces@lists.mpi-forum.org [mailto:mpi-forum-bounces@lists.mpi-forum.org]
<b>De la part de</b> William Gropp<br>
<b>Envoyé :</b> vendredi 26 mai 2017 01:58<br>
<b>À :</b> Main MPI Forum mailing list<br>
<b>Objet :</b> Re: [Mpi-forum] Threading guarantees of MPI_User_function<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Just to be clear on this, the MPI standard generally requires the user to enforce any synchronization needed when using threads with MPI, so Jeff’s answer is aligned with the standard.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Bill<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif";color:black">William Gropp<br>
Interim Director and Chief Scientist, NCSA<br>
Thomas M. Siebel Chair in Computer Science<br>
University of Illinois Urbana-Champaign<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">On May 25, 2017, at 1:49 PM, Phil Ruffwind <<a href="mailto:rf@rufflewind.com">rf@rufflewind.com</a>> wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Thu, May 25, 2017, at 12:55, Jeff Hammond wrote:<br>
<br>
<o:p></o:p></p>
<p class="MsoNormal">I expect that MPI_User_function is invoked by the thread that invokes the<br>
MPI function that uses it, and that you need a mutex to touch shared<br>
state<br>
associated with MPI_User_function when running with MPI_THREAD_MULTIPLE,<br>
but not otherwise.<br>
<br>
I would hope that MPI implementations do not serialize calls to<br>
MPI_User_function<br>
in MPI_THREAD_MULTIPLE mode, because there are many cases where<br>
MPI_User_function<br>
is trivially reentrant and I would like simultaneous progress if I call<br>
MPI_Allreduce concurrently from 2+ threads (with different communicators,<br>
of course) with the same MPI_User_function.<o:p></o:p></p>
<p class="MsoNormal"><br>
Thanks for clarifying.  In that case, I'll assume synchronization is<br>
necessary.<br>
<span lang="EN-US">_______________________________________________<br>
mpi-forum mailing list<br>
</span><a href="mailto:mpi-forum@lists.mpi-forum.org"><span lang="EN-US">mpi-forum@lists.mpi-forum.org</span></a><span lang="EN-US"><br>
</span><a href="https://lists.mpi-forum.org/mailman/listinfo/mpi-forum"><span lang="EN-US">https://lists.mpi-forum.org/mailman/listinfo/mpi-forum</span></a><span lang="EN-US"><o:p></o:p></span></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</div>
</body>
</html>