<div dir="ltr">

<p class="">Hi Rajeev,</p>

<p class=""></p>

<p class="">Thank you for your prompt response. </p>

<p class=""></p>

<p class="">I understand why it is helpful to indicate there are
other threads, which was the first part of my question.</p>

<p class=""></p>

<p class="">Can you please let me know the answer to the second part
of the question below?<span style>  </span>Is it OK for the code
to use MPI_THREAD_SINGLE for the situation described below?</p>

<p class=""></p>

<p class="">Thanks,</p>

<p class="">Raghu</p>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Jul 13, 2014 at 2:53 PM, Thakur, Rajeev <span dir="ltr"><<a href="mailto:thakur@mcs.anl.gov" target="_blank">thakur@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It is so that the MPI implementation knows that other user threads exist. It can then invoke thread-safe versions of C or Fortran library calls if necessary.<br>

<span class="HOEnZb"><font color="#888888"><br>
Rajeev<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Jul 13, 2014, at 8:04 AM, <a href="mailto:rreddypsc@gmail.com">rreddypsc@gmail.com</a> wrote:<br>
<br>
> Sorry about resurrecting a topic that is more than a month old.<br>
><br>
> I was also under the impression that as long as all MPI calls are done outside of the threaded regions, using MPI_THREAD_SINGLE was sufficient. Based on the discussion below it looks like even in those situations one has to use MPI_THREAD_FUNNELED.<br>

><br>
> For my understanding is it possible to briefly explain why this is the case?  Is this still required, for example, if there is no MPI activity happening at all (for example no asynchronous communication is happening when any part of the threaded code is active)?<br>

><br>
> In particular, I'm thinking about:<br>
><br>
>       MPI comm start<br>
>       MPI comm end<br>
><br>
>       threaded work (OpenMP for example with no MPI of any kind)<br>
><br>
>       MPI comm start<br>
>       MPI comm end<br>
>       ...etc<br>
><br>
> The reason for this question is that I have a feeling that a lot of other users may be of the same opinion and would benefit from clarification.<br>
><br>
> TIA for clarification!<br>
><br>
> Raghu<br>
><br>
><br>
> --On Monday, June 2, 2014 12:58 AM +0000 "Balaji, Pavan" <<a href="mailto:balaji@anl.gov">balaji@anl.gov</a>> wrote:<br>
><br>
>><br>
>> On May 30, 2014, at 12:30 PM, Boisvert, Sebastien <<a href="mailto:boisvert@anl.gov">boisvert@anl.gov</a>><br>
>> wrote:<br>
>>> On Friday, May 30, 2014 12:26 PM, <a href="mailto:discuss-bounces@mpich.org">discuss-bounces@mpich.org</a><br>
>>> [<a href="mailto:discuss-bounces@mpich.org">discuss-bounces@mpich.org</a>] on behalf of Rajeev Thakur<br>
>>> [<a href="mailto:thakur@mcs.anl.gov">thakur@mcs.anl.gov</a>] wrote:<br>
>>>> To: <a href="mailto:discuss@mpich.org">discuss@mpich.org</a><br>
>>>> Subject: Re: [mpich-discuss] What is the        difference      between<br>
>>>> MPI_THREAD_SINGLE and MPI_THREAD_FUNNELED<br>
>>>><br>
>>>> It shouldn't, but what does it return in your program?<br>
>>><br>
>>> I am currently using MPI_Init (I thought it was OK if only the main<br>
>>> thread calls MPI functions).<br>
>>><br>
>>> Code-><br>
>>> <a href="https://github.com/GeneAssembly/biosal/blob/master/engine/node.c#L33" target="_blank">https://github.com/GeneAssembly/biosal/blob/master/engine/node.c#L33</a><br>
>><br>
>> If you initialize with MPI_INIT, the MPI implementation can choose to<br>
>> provide whatever thread-level it likes.  There are two options for you:<br>
>><br>
>> Option 1:<br>
>><br>
>> MPI_INIT  /* tell MPI to give you what it can */<br>
>> MPI_QUERY_THREAD /* ask for what you got */<br>
>> if (less than FUNNELED) abort;<br>
>><br>
>> Option 2:<br>
>><br>
>> MPI_INIT_THREAD(FUNNELED, &provided); /* tell MPI to give you FUNNELED */<br>
>> if (provided < FUNNELED) abort;<br>
>><br>
>> Option 2 is cleaner since you gave MPI a hint that you would like to have<br>
>> FUNNELED level.<br>
>><br>
>>  — Pavan<br>
>><br>
>> _______________________________________________<br>
>> discuss mailing list     <a href="mailto:discuss@mpich.org">discuss@mpich.org</a><br>
>> To manage subscription options or unsubscribe:<br>
>> <a href="https://lists.mpich.org/mailman/listinfo/discuss" target="_blank">https://lists.mpich.org/mailman/listinfo/discuss</a><br>
><br>
><br>
> _______________________________________________<br>
> discuss mailing list     <a href="mailto:discuss@mpich.org">discuss@mpich.org</a><br>
> To manage subscription options or unsubscribe:<br>
> <a href="https://lists.mpich.org/mailman/listinfo/discuss" target="_blank">https://lists.mpich.org/mailman/listinfo/discuss</a><br>
<br>
_______________________________________________<br>
discuss mailing list     <a href="mailto:discuss@mpich.org">discuss@mpich.org</a><br>
To manage subscription options or unsubscribe:<br>
<a href="https://lists.mpich.org/mailman/listinfo/discuss" target="_blank">https://lists.mpich.org/mailman/listinfo/discuss</a><br>
</div></div></blockquote></div><br></div>