Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |  

This web mail archive is frozen.

This page is part of a frozen web archive of this mailing list.

You can still navigate around this archive, but know that no new mails have been added to it since July of 2016.

Click here to be taken to the new web archives of this list; it includes all the mails that are in this frozen archive plus all new mails that have been sent to the list since it was migrated to the new archives.

Subject: [OMPI users] MPI one-sided passive synchronization.
From: Abhishek Kulkarni (abbyzcool_at_[hidden])
Date: 2011-04-13 14:31:23


Hello,

I am trying to better understand the semantics of passive synchronization in
one-sided communication calls. Doesn't MPI_Win_unlock()
block to ensure that all the preceeding RMA calls in that epoch have been
synced?
In that case, why is an undefined value returned when trying to load from a
local window? (see below)

    MPI_Alloc_mem(128, MPI_INFO_NULL, &ptr);
    MPI_Win_create(ptr, 128, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &win);

    // write to the target window of the head node
    if (rank == (size - 1)) {
        MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
        in = 10;
        MPI_Put(&in, 1, MPI_INT, 0, 0, 1, MPI_INT, win);
        MPI_Win_unlock(0, win);
    } else {
        // busy wait
        start = MPI_Wtime();
        end = MPI_Wtime();
        while ((end - start) < 1)
            end = MPI_Wtime();
    }

    // read from the head node's window
    MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 0, 0, win);
    MPI_Get(&out, 1, MPI_INT, 0, 0, 1, MPI_INT, win);
    MPI_Win_unlock(0, win);

    MPI_Barrier(MPI_COMM_WORLD);
    printf("R%d: %d\n", rank, out);

The output of the above program with 1.5.3rc1 (and also with MPICH2 1.4rc2)
is:
R2: 10
R1: 10
R0: 0

whereas I expect to see:
R2: 10
R1: 10
R0: 10

Thanks,
Abhishek