-
-
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)
end
The 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