<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
<div>pg 483, ln 44-45:  "<b>Multiple threads completing the same request.</b> A program in which two threads block, waiting on the same request, is erroneous."</div>
<div><br>
</div>
<div>Rajeev<br>
<div><br>
<div><br>
<div>
<div>On Jan 16, 2015, at 12:03 AM, Jeff Hammond <<a href="mailto:jeff.science@gmail.com">jeff.science@gmail.com</a>></div>
<div> wrote:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite">MPI-3 page 483 says: "two concurrently running threads may make MPI<br>
calls and the outcome will be as if the calls executed in some order,<br>
even if their execution is interleaved."<br>
<br>
The outcome of my program where the calls execute in some order is<br>
well-defined: the first call completes the request and the second call<br>
returns immediately since req=MPI_REQUEST_NULL.<br>
<br>
Furthermore, MPI-3 page 486 says that MPI_THREAD_MULTIPLE is defined<br>
to mean "Multiple threads may call MPI, with no restrictions."<br>
Without restriction implies that data races are valid.  The prior<br>
statement ensures that the result of a program with MPI-related races<br>
is well-defined.<br>
<br>
Do you disagree with my interpretation of MPI-3?<br>
<br>
Jeff<br>
<br>
On Thu, Jan 15, 2015 at 9:41 PM, Thakur, Rajeev <<a href="mailto:thakur@mcs.anl.gov">thakur@mcs.anl.gov</a>> wrote:<br>
<blockquote type="cite">I would say the program is erroneous. It is calling MPI_Wait concurrently on the same request, i.e., you are completing one operation twice. You can call MPI_Wait concurrently, but with different requests.<br>
<br>
Rajeev<br>
<br>
On Jan 15, 2015, at 11:32 PM, Jeff Hammond <<a href="mailto:jeff.science@gmail.com">jeff.science@gmail.com</a>><br>
wrote:<br>
<br>
<blockquote type="cite">I am trying to run the following program.  It's obviously a silly<br>
program but I wrote it to make an argument about the MPI standard.  I<br>
don't believe it violates the MPI standard, but please let me know if<br>
I am mistaken.<br>
<br>
smakramu-mobl:MPI jrhammon$ cat wait-race.c<br>
#include <stdio.h><br>
#include <omp.h><br>
#include <mpi.h><br>
<br>
int main(int argc, char * argv[])<br>
{<br>
  int provided;<br>
  MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided);<br>
  if (provided<MPI_THREAD_MULTIPLE) {<br>
      printf("inadequate thread support\n");<br>
      MPI_Finalize();<br>
  }<br>
<br>
  MPI_Request req;<br>
  MPI_Ibarrier(MPI_COMM_WORLD, &req);<br>
  //req = MPI_REQUEST_NULL;<br>
#pragma omp parallel num_threads(2) shared(req)<br>
  {<br>
      MPI_Wait(&req, MPI_STATUS_IGNORE);<br>
  }<br>
<br>
  printf("test finished\n");<br>
  MPI_Finalize();<br>
  return 0;<br>
}<br>
<br>
I compile the program with MPICH git master and GCC 4.9.2 from about a week ago:<br>
<br>
smakramu-mobl:MPI jrhammon$ mpicc -fopenmp -g -Wall wait-race.c<br>
<br>
smakramu-mobl:MPI jrhammon$ mpichversion<br>
MPICH Version:        3.2a2<br>
MPICH Release date:   unreleased development copy<br>
MPICH Device:         ch3:nemesis<br>
MPICH configure:      CC=gcc-4.9 CXX=g++-4.9 FC=gfortran-4.9<br>
F77=gfortran-4.9 --disable-cxx --enable-fortran<br>
--enable-threads=runtime --enable-g=dbg --with-pm=hydra<br>
--prefix=/opt/mpich/dev/gcc/default --enable-wrapper-rpath<br>
--enable-static --enable-shared<br>
MPICH CC:     gcc-4.9    -g -O2<br>
MPICH CXX:    no   -g<br>
MPICH F77:    gfortran-4.9   -g -O2<br>
MPICH FC:     gfortran-4.9   -g -O2<br>
<br>
Sometimes the program runs fine:<br>
<br>
smakramu-mobl:MPI jrhammon$ mpiexec -n 2 ./a.out<br>
test finished<br>
test finished<br>
<br>
And sometimes it fails like this:<br>
<br>
smakramu-mobl:MPI jrhammon$ mpiexec -n 2 ./a.out<br>
test finished<br>
Fatal error in MPI_Wait: Internal MPI error!, error stack:<br>
MPI_Wait(187).............: MPI_Wait(request=0x7fff5b51ee88, status=0x1) failed<br>
MPIR_Wait_impl(84)........:<br>
MPIR_Request_complete(232): INTERNAL ERROR: unexpected value in case<br>
statement (value=78309520)<br>
<br>
So either my program violates the MPI standard or there's a bug in<br>
MPICH.  Please let me know which it is.<br>
<br>
Thanks,<br>
<br>
Jeff<br>
<br>
--<br>
Jeff Hammond<br>
<a href="mailto:jeff.science@gmail.com">jeff.science@gmail.com</a><br>
http://jeffhammond.github.io/<br>
_______________________________________________<br>
discuss mailing list     discuss@mpich.org<br>
To manage subscription options or unsubscribe:<br>
https://lists.mpich.org/mailman/listinfo/discuss<br>
</blockquote>
<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">https://lists.mpich.org/mailman/listinfo/discuss</a><br>
</blockquote>
<br>
<br>
<br>
-- <br>
Jeff Hammond<br>
<a href="mailto:jeff.science@gmail.com">jeff.science@gmail.com</a><br>
http://jeffhammond.github.io/<br>
_______________________________________________<br>
discuss mailing list     discuss@mpich.org<br>
To manage subscription options or unsubscribe:<br>
https://lists.mpich.org/mailman/listinfo/discuss<br>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</body>
</html>