Skip to content

Commit e8927d6

Browse files
committed
Merge pull request #124 from sourceryinstitute/bugfix-duplicate-syncimages
Duplicates in sync images array :shipit:
2 parents 2a8de5f + ffcd717 commit e8927d6

File tree

5 files changed

+63
-0
lines changed

5 files changed

+63
-0
lines changed

CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ if(opencoarrays_aware_compiler)
161161
add_mpi_test(co_max 4 ${tests_root}/unit/collectives/co_max_test)
162162
add_mpi_test(syncall 32 ${tests_root}/unit/sync/syncall)
163163
add_mpi_test(syncimages 32 ${tests_root}/unit/sync/syncimages)
164+
add_mpi_test(duplicate_syncimages 8 ${tests_root}/unit/sync/duplicate_syncimages)
164165
add_mpi_test(co_reduce 4 ${tests_root}/unit/collectives/co_reduce_test)
165166
# add_mpi_test(syncimages_status 32 ${tests_root}/unit/sync/syncimages_status)
166167

src/libcaf.h

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
5757
#define STAT_UNLOCKED 0
5858
#define STAT_LOCKED 1
5959
#define STAT_LOCKED_OTHER_IMAGE 2
60+
#define STAT_DUP_SYNC_IMAGES 3
6061
#define STAT_STOPPED_IMAGE 6000
6162

6263
/* Describes what type of array we are registerring. Keep in sync with

src/mpi/mpi_caf.c

+11
Original file line numberDiff line numberDiff line change
@@ -1601,6 +1601,7 @@ PREFIX (sync_images) (int count, int images[], int *stat, char *errmsg,
16011601
int errmsg_len)
16021602
{
16031603
int ierr = 0, i=0, remote_stat = 0;
1604+
int dup = 0, j = 0;
16041605
MPI_Status s;
16051606

16061607
if (count == 0 || (count == 1 && images[0] == caf_this_image))
@@ -1610,6 +1611,16 @@ PREFIX (sync_images) (int count, int images[], int *stat, char *errmsg,
16101611
return;
16111612
}
16121613

1614+
for(i=0;i<count;i++)
1615+
for(j=0;j<i;j++)
1616+
if(images[i] == images[j])
1617+
{
1618+
ierr = STAT_DUP_SYNC_IMAGES;
1619+
if(stat)
1620+
*stat = ierr;
1621+
goto sync_images_err_chk;
1622+
}
1623+
16131624
#ifdef GFC_CAF_CHECK
16141625
{
16151626
for (i = 0; i < count; i++)

src/tests/unit/sync/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ target_link_libraries(syncall OpenCoarrays)
44
add_executable(syncimages syncimages.f90)
55
target_link_libraries(syncimages OpenCoarrays)
66

7+
add_executable(duplicate_syncimages duplicate_syncimages.f90)
8+
target_link_libraries(duplicate_syncimages OpenCoarrays)
9+
710
#add_executable(syncimages_status syncimages_status.f90)
811
#target_link_libraries(syncimages_status OpenCoarrays)
912

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
! syncimages test
2+
!
3+
! Copyright (c) 2012-2014, Sourcery, Inc.
4+
! All rights reserved.
5+
!
6+
! Redistribution and use in source and binary forms, with or without
7+
! modification, are permitted provided that the following conditions are met:
8+
! * Redistributions of source code must retain the above copyright
9+
! notice, this list of conditions and the following disclaimer.
10+
! * Redistributions in binary form must reproduce the above copyright
11+
! notice, this list of conditions and the following disclaimer in the
12+
! documentation and/or other materials provided with the distribution.
13+
! * Neither the name of the Sourcery, Inc., nor the
14+
! names of its contributors may be used to endorse or promote products
15+
! derived from this software without specific prior written permission.
16+
!
17+
! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18+
! ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19+
! WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20+
! DISCLAIMED. IN NO EVENT SHALL SOURCERY, INC., BE LIABLE FOR ANY
21+
! DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22+
! (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23+
! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24+
! ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25+
! (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26+
!
27+
program duplicate_syncimages
28+
implicit none
29+
30+
integer :: me,i,array(4)
31+
integer :: stat = 0
32+
33+
me = this_image()
34+
35+
if(me == 1) then
36+
array(1) = 5; array(2) = 6; array(3) = 7; array(4) = 5
37+
sync images(array,stat=stat)
38+
if(stat == 3) then
39+
print *,"Test passed."
40+
else
41+
print *,"Test failed."
42+
endif
43+
endif
44+
45+
sync all
46+
47+
end program

0 commit comments

Comments
 (0)