<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><div dir="ltr"><div><pre style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap"><font face="arial, helvetica, sans-serif">Hi Richard,</font></pre><pre style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap"><font face="arial, helvetica, sans-serif">The window is initialised in MCSLockInit (see book author's code <a href="http://www.mcs.anl.gov/research/projects/mpi/usingmpi/examples-advmpi/rma2/mcs-lock.c" rel="noreferrer" target="_blank" style="font-size:12.8px">http://www.mcs.anl.gov/<wbr>research/projects/mpi/<wbr>usingmpi/examples-advmpi/rma2/<wbr>mcs-lock.c</a>)</font></pre><pre style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap">void MCSLockInit(MPI_Comm comm, MPI_Win *win)
{
  int      *lmem, rank;
  MPI_Aint winsize;
  MPI_Comm_rank(comm,&rank);

  if (MCS_LOCKRANK == MPI_KEYVAL_INVALID)
    MPI_Win_create_keyval(MPI_WIN_NULL_COPY_FN,
                          MPI_WIN_NULL_DELETE_FN,
                          &MCS_LOCKRANK, (void*)0);

  winsize = 2 * sizeof(int);
  if (rank == 0) winsize += sizeof(int);
  MPI_Win_allocate(winsize, sizeof(int), MPI_INFO_NULL, comm,
                   &lmem, win);
  lmem[nextRank] = -1;
  lmem[blocked]  = 0;
  if (rank == 0) {
    lmem[lockTail] = -1;
  }
  MPI_Win_set_attr(*win, MCS_LOCKRANK, (void*)(MPI_Aint)rank);
  MPI_Barrier(comm);
}</pre></div><div>Best regards, Ask</div><div><br></div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Date: Sat, 4 Mar 2017 19:03:13 +0000<br>
From: Richard Warren <<a href="mailto:Richard.Warren@hdfgroup.org">Richard.Warren@hdfgroup.org</a>><br>
To: "<a href="mailto:discuss@mpich.org">discuss@mpich.org</a>" <<a href="mailto:discuss@mpich.org">discuss@mpich.org</a>><br>
Subject: Re: [mpich-discuss] MCS lock and MPI RMA problem<br>
Message-ID:<br>
        <<a href="mailto:BY2PR17MB0406FB1E6C8D6DC76CF45279EF2A0@BY2PR17MB0406.namprd17.prod.outlook.com">BY2PR17MB0406FB1E6C8D6DC76CF4<wbr>5279EF2A0@BY2PR17MB0406.<wbr>namprd17.prod.outlook.com</a>><br>
<br>
Content-Type: text/plain; charset="us-ascii"<br>
<br>
I don't see that you've actually created an MPI_Win object anywhere.  My guess is that you need to use MPI_Win_create to initialize your window before you can do any locks or other RMA operations with it.<br>
<br>
______________________________<wbr>__<br>
From: Ask Jakobsen <<a href="mailto:afj@qeye-labs.com">afj@qeye-labs.com</a>><br>
Sent: Saturday, March 4, 2017 3:30:09 AM<br>
To: <a href="mailto:discuss@mpich.org">discuss@mpich.org</a><br>
Subject: [mpich-discuss] MCS lock and MPI RMA problem<br>
<br>
Hi,<br>
<br>
I have downloaded the source code for the MCS lock from the excellent book "Using Advanced MPI" from <a href="http://www.mcs.anl.gov/research/projects/mpi/usingmpi/examples-advmpi/rma2/mcs-lock.c" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/<wbr>research/projects/mpi/<wbr>usingmpi/examples-advmpi/rma2/<wbr>mcs-lock.c</a><br>
<br>
I have made a very simple piece of test code for testing the MCS lock but it works at random and often never escapes the busy loops in the acquire and release functions (see attached source code). The code appears semantically correct to my eyes.<br>
<br>
#include <stdio.h><br>
#include <mpi.h><br>
#include "mcs-lock.h"<br>
<br>
int main(int argc, char *argv[])<br>
{<br>
  MPI_Win win;<br>
  MPI_Init( &argc, &argv );<br>
<br>
  MCSLockInit(MPI_COMM_WORLD, &win);<br>
<br>
  int rank, size;<br>
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);<br>
  MPI_Comm_size(MPI_COMM_WORLD, &size);<br>
<br>
  printf("rank: %d, size: %d\n", rank, size);<br>
<br>
<br>
  MCSLockAcquire(win);<br>
  printf("rank %d aquired lock\n", rank);   fflush(stdout);<br>
  MCSLockRelease(win);<br>
<br>
<br>
  MPI_Win_free(&win);<br>
  MPI_Finalize();<br>
  return 0;<br>
}<br>
<br>
<br>
I have tested on several hardware platforms and mpich-3.2 and mpich-3.3a2 but with no luck.<br>
<br>
It appears that the MPI_Win_Sync are not "refreshing" the local data or I have a bug I can't spot.<br>
<br>
A simple unfair lock like <a href="http://www.mcs.anl.gov/research/projects/mpi/usingmpi/examples-advmpi/rma2/ga_mutex1.c" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/<wbr>research/projects/mpi/<wbr>usingmpi/examples-advmpi/rma2/<wbr>ga_mutex1.c</a> works perfectly.<br>
<br>
Best regards, Ask Jakobsen<br>
<br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="http://lists.mpich.org/pipermail/discuss/attachments/20170304/c292bfaf/attachment.html" rel="noreferrer" target="_blank">http://lists.mpich.org/<wbr>pipermail/discuss/attachments/<wbr>20170304/c292bfaf/attachment.<wbr>html</a>><br>
<br></blockquote></div>
</div></div>