I've asked in comp.lang.fortran usenet group,
but got no answer, so am trying here.
Is sourced allocation allowed for coarrays
but the standard?
This program:
1 integer, allocatable :: a(:,:)[:], b(:,:)[:], c(:,:)[:]
2
3 allocate (a(10,10)[*], source=0)
4
5 a = 0
6 if (this_image() .eq. 1) a=1
7
8 sync all
9
10 allocate (b(0:11,3)[*], source=0)
11 !allocate (c(0:11,3)[*], source=b)
12 allocate (c[*], source=b)
13
14 b(1:10,1:3) = a(1:10,1:3) [1]
15 c(1:10,1:3) = a(1:10,4:6) [1]
16
17 sync all
18
19 if ( this_image() .gt. 1) b(0,:) = c(10,:) [this_image()-1]
20
21 end
compiled with ifort 14, and run with shared
memory gives segfault:
$ ./a.out
forrtl: severe (174): SIGSEGV, segmentation fault occurred
In coarray image 2
Image PC Routine Line Source
a.out 000000000046B199 Unknown Unknown Unknown
a.out 0000000000469B10 Unknown Unknown Unknown
a.out 00000000004392E2 Unknown Unknown Unknown
a.out 000000000041F813 Unknown Unknown Unknown
a.out 000000000040730B Unknown Unknown Unknown
libpthread.so.0 00002AAAAB1B7500 Unknown Unknown Unknown
libicaf.so 00002AAAAACD026D Unknown Unknown Unknown
a.out 0000000000406866 Unknown Unknown Unknown
a.out 00000000004038C6 Unknown Unknown Unknown
libc.so.6 00002AAAAB3E4CDD Unknown Unknown Unknown
a.out 00000000004037B9 Unknown Unknown Unknown
application called MPI_Abort(comm=0x84000000, 3) - process 1
rank 1 in job 1 newblue4_35267 caused collective abort of all ranks
exit status of rank 1: return code 3
$
However, when line 12 is commente out
and line 11 is used instead, the program
runs fine.
AS far as I understand the standard, the
meaning of the two statements:
allocate (c(0:11,3)[*], source=b)
allocate (c[*], source=b)
is identical. Is that not so?
Is the segfault expected?
Thanks
Anton
|