- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 57
Open
Description
! syncall test
!
! Copyright (c) 2012-2014, Sourcery, Inc.
! All rights reserved.
!
! Redistribution and use in source and binary forms, with or without
! modification, are permitted provided that the following conditions are met:
!     * Redistributions of source code must retain the above copyright
!       notice, this list of conditions and the following disclaimer.
!     * Redistributions in binary form must reproduce the above copyright
!       notice, this list of conditions and the following disclaimer in the
!       documentation and/or other materials provided with the distribution.
!     * Neither the name of the Sourcery, Inc., nor the
!       names of its contributors may be used to endorse or promote products
!       derived from this software without specific prior written permission.
!
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
! ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
! WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
! DISCLAIMED. IN NO EVENT SHALL SOURCERY, INC., BE LIABLE FOR ANY
! DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
! (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
! ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
! (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
!
program syncall
  implicit none
  integer :: me,np,i
  me = this_image()
  np = num_images()
  call mysyncall()
end program syncall
subroutine mysyncall()
  use mpi_f08
  implicit none
  integer :: me,np,i
  integer, allocatable, dimension(:), codimension[:]  :: scalar2
  logical :: success = .true.
  integer(c_int), allocatable :: tally(:)
  integer :: rank, size
  integer :: base
  integer(kind=mpi_address_kind) :: sz
  type(MPI_Win) :: win = mpi_win_null
  call mpi_comm_rank(mpi_comm_world, rank)
  call mpi_comm_size(mpi_comm_world, size)
  print *,"hello ", rank, " / ", size
  base = 100
  sz = 4096
  ! comment the line below to hide the issue
  if (rank.eq.1) call mpi_win_create(base, sz, 4, mpi_info_null, mpi_comm_self, win)
  me = this_image()
  np = num_images()
  allocate(scalar2(1)[*])
  scalar2(1) = -1
  if(me /= 1) call sleep(1)
  scalar2(1) = 1
  sync all
  if(me == 1) then
     do i=1,np
        if(scalar2(1)[i] /= 1) then
           success = .false.
        endif
     end do
  end if
  if(me == 1) then
    if (success) then
      print *,'Test passed.'
    else
      print *,'Test failed.'
    endif
  endif
  if (win.ne.mpi_win_null) call mpi_win_free(win)
endThe program above fails when ran on two nodes with gfortran-15, the latest OpenCoarray and MPICH
The root cause is that the MPICH implementation does not guarantee all ranks of the same window will have the same MPI_Win opaque handler, even if one might be lucky most of the time.
Refs #800
The title of the issue should start with Defect: followed by a
succinct title.
- [x ] I am reporting a bug others will be able to reproduce and not asking a question or requesting a new feature.
System information including:
- OpenCoarrays Version: 2.10.2-32-g3d0fa68
- Fortran Compiler: gfortran 15.1.0
- C compiler used for building lib: gcc 15.1.0
- Installation method: cmake && make && make install
- All flags & options passed to the installer
- Output of uname -a: 4.18.0-553.22.1.el8_10.aarch64
- MPI library being used: MPICH 4.3.1
- Machine architecture and number of physical cores: A64fx 48+2 cores
- Version of CMake: 3.26.5
To help us debug your issue please explain:
What you were trying to do (and why)
What happened (include command output, screenshots, logs, etc.)
$ cafrun -n 2 ./a.out
 Test failed.
What you expected to happen
$ cafrun -n 2 ./a.out
 Test passed.
Step-by-step reproduction instructions to reproduce the error/bug
$ caf -I/opt/mpich-4.3.1/include ns.f90
$ cafrun -n 2 ./a.out
Metadata
Metadata
Assignees
Labels
No labels