Nathan and Kawashima-san,

i just committed https://github.com/open-mpi/ompi/commit/6eac6a8b002d3992182c141334a7009ba5fa6176

the datafile is still named with the CID, but it is now created
in ompi_process_info.proc_session_dir
instead of
ompi_process_info.job_session_dir

the file is created on rank 0 of the given communicator, and file name is then broadcasted
as part of module->seg_ds to the other ranks.

that was way more trivial than what i initially expected.

Cheers,

Gilles

On 2/3/2016 9:30 AM, Kawashima, Takahiro wrote:
Gilles,

I see. Thanks!

Takahiro Kawashima,
MPI development team,
Fujitsu

Kawashima-san,

we always duplicate the communicator, and use the CID of the duplicated
communicator, so bottom line,
there cannot be more than one window per communicator.

i will double check about using PID. if a broadcast is needed, i would
rather use the process name of rank 0 in order to avoid a broadcast.

Cheers,

Gilles

On 2/3/2016 8:40 AM, Kawashima, Takahiro wrote:
Nathan,

Is is sufficient?
Multiple windows can be created on a communicator.
So I think PID + CID is not sufficient.

Possible fixes:
- The root process creates a filename with a random number
    and broadcast it in the communicator.
- Use per-communicator counter and use it in the filename.

Regards,
Takahiro Kawashima,
MPI development team,
Fujitsu

Hmm, I think you are correct. There may be instances where two different
local processes may use the same CID for different communicators. It
should be sufficient to add the PID of the current process to the
filename to ensure it is unique.

-Nathan

On Tue, Feb 02, 2016 at 09:33:29PM +0900, Gilles Gouaillardet wrote:
     Nathan,
     the sm osc component uses communicator CID to name the file that will be
     used to create shared memory segments.
     if I understand and correctly, two different communicators coming from the
     same MPI_Comm_split might share the same CID, so CID (alone) cannot be
     used to generate a unique per communicator file name
     Makes sense ?
     Cheers,
     Gilles

     ---------- Forwarded message ----------
     From: Peter Wind <peter.w...@met.no>
     Date: Tuesday, February 2, 2016
     Subject: [OMPI users] shared memory under fortran, bug?
     To: us...@open-mpi.org

     Enclosed is a short (< 100 lines) fortran code example that uses shared
     memory.
     It seems to me it behaves wrongly if openmpi is used.
     Compiled with SGI/mpt , it gives the right result.

     To fail, the code must be run on a single node.
     It creates two groups of 2 processes each. Within each group memory is
     shared.
     The error is that the two groups get the same memory allocated, but they
     should not.

     Tested with openmpi 1.8.4, 1.8.5, 1.10.2 and gfortran, intel 13.0, intel
     14.0
     all fail.

     The call:
        call MPI_Win_allocate_shared(win_size, disp_unit, MPI_INFO_NULL,
     comm_group, cp1, win, ierr)

     Should allocate memory only within the group. But when the other group
     allocates memory, the pointers from the two groups point to the same
     address in memory.

     Could you please confirm that this is the wrong behaviour?

     Best regards,
     Peter Wind
program shmem_mpi

     !
     ! in this example two groups are created, within each group memory is 
shared.
     ! Still the other group get allocated the same adress space, which it 
shouldn't.
     !
     ! Run with 4 processes, mpirun -np 4 a.out


     use mpi

     use, intrinsic :: iso_c_binding, only : c_ptr, c_f_pointer

     implicit none
!   include 'mpif.h'

     integer, parameter :: nsize = 100
     integer, pointer   :: array(:)
     integer            :: num_procs
     integer            :: ierr
     integer            :: irank, irank_group
     integer            :: win
     integer            :: comm = MPI_COMM_WORLD
     integer            :: disp_unit
     type(c_ptr)        :: cp1
     type(c_ptr)        :: cp2
     integer            :: comm_group

     integer(MPI_ADDRESS_KIND) :: win_size
     integer(MPI_ADDRESS_KIND) :: segment_size

     call MPI_Init(ierr)
     call MPI_Comm_size(comm, num_procs, ierr)
     call MPI_Comm_rank(comm, irank, ierr)

     disp_unit = sizeof(1)
     call MPI_COMM_SPLIT(comm, irank*2/num_procs, irank, comm_group, ierr)
     call MPI_Comm_rank(comm_group, irank_group, ierr)
!   print *, 'irank=', irank, ' group rank=', irank_group

     if (irank_group == 0) then
        win_size = nsize*disp_unit
     else
        win_size = 0
     endif

     call MPI_Win_allocate_shared(win_size, disp_unit, MPI_INFO_NULL, 
comm_group, cp1, win, ierr)
     call MPI_Win_fence(0, win, ierr)

     call MPI_Win_shared_query(win, 0, segment_size, disp_unit, cp2, ierr)

     call MPI_Win_fence(0, win, ierr)
     CALL MPI_BARRIER(comm, ierr)! allocations finished
!   print *, 'irank=', irank, ' size ', segment_size

     call c_f_pointer(cp2, array, [nsize])

     array(1)=0;array(2)=0
     CALL MPI_BARRIER(comm, ierr)!
77 format(4(A,I3))
     if(irank<num_procs/2)then
        if (irank_group == 0)array(1)=11
        CALL MPI_BARRIER(comm, ierr)
        print 77, 'Group 0, rank', irank, ':  array ', array(1), ' ',array(2)
        CALL MPI_BARRIER(comm, ierr)!Group 1 not yet start writing
        CALL MPI_BARRIER(comm, ierr)!Group 1 finished writing
        print 77, 'Group 0, rank', irank, ':  array ', array(1),' ',array(2)
        if(array(1)==11.and.array(2)==0)then
           print *,irank,' correct result'
        else
           print *,irank,' wrong result'
        endif
     else
        CALL MPI_BARRIER(comm, ierr)
        CALL MPI_BARRIER(comm, ierr)!Group 0 finished writing
        print 77, 'Group 1, rank', irank, ':  array ', array(1),' ',array(2)
        if (irank_group == 0)array(2)=22
        CALL MPI_BARRIER(comm, ierr)
        print 77, 'Group 1, rank', irank, ':  array ', array(1),' ',array(2)
        if(array(1)==0.and.array(2)==22)then
           print *,irank,' correct result'
        else
           print *,irank,' wrong result'
        endif
     endif

     call MPI_Finalize(ierr)

end program
_______________________________________________
devel mailing list
de...@open-mpi.org
Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
Link to this post: 
http://www.open-mpi.org/community/lists/devel/2016/02/18540.php


Reply via email to