-
-
Notifications
You must be signed in to change notification settings - Fork 55
non-coarray vector lhs produces crashes or wrong results with gets #322
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Can you please include a little bit more information: MPI implementation, system (OS, arch, virtualized?) and how you built and installed OpenCoarrays (with install log if possible). Also how did you compile and invoke your code? How many procs? Thanks! |
Base MPI is Intel MPI 5.1.3
The only log file I found was CMakeFiles/CMakeOutput.log which I have attached (adding a .txt extension, to enable the upload). The example code was compiled with
Hope this helps. |
Thanks so much @reinh-bader... I think I know of a machine or two that has Intel MPI 5.1.3 if the problem does not show up with MPICH/OpenMPI |
Sorry I have been swamped, and have not had a chance to fully investigate yet, but this is still on my radar |
No trouble, take your time. |
This is still broken as of 0c2dce7 on 12/26/2017 Here is the test case inlined: program mod_vecsub_01
implicit none
integer, parameter :: ndim = 5, vdim = 2
real :: vec(ndim), res(ndim)[*]
integer :: idx(vdim)
integer :: i, me
logical :: ok[*]
res = [ (real(i), i=1, ndim) ]
vec = 0.0
idx = [ ndim, 1 ]
ok = .true.
sync all
me = this_image()
vec(idx) = res(1:2)[1]
if (vec(1) /= 2.0 .or. vec(5) /= 1.0) then
critical
ok[1] = .false.
write(*, *) 'FAIL on image ',me,vec(idx)
end critical
end if
if (me == 1) then
if (ok) then
write(*, *) 'OK'
end if
end if
end program |
That's got nothing to do with opencoarrays. It's a compiler bug. Gfortran is not respecting the indexed addressing for the lhs after the get(). It's trying to do it before. |
This has been submitted as Bug 83606 on gfortran with the following slightly simplified code: integer, parameter :: ndim=5
integer :: i,vec(ndim)=0, res(ndim)[*]=[ (i, i=1, ndim) ]
vec([ndim,1]) = res(1:2)[1]
if (vec(1) /= res(2) .or. vec(ndim) /= res(1)) &
print *," wrong result ",vec([ndim,1])," on image ",this_image()
end |
See also #427. |
Fixed on all gcc's from 6 on. |
@vehre is the fix in 6.4 and 7.3 or will it be in 6.5 and 7.4? |
- Enable this once we figure out which GCCs it's fixed on.
Uh oh!
There was an error while loading. Please reload this page.
The attached source code was built with
and produces wrong results when executed with any number of images. The version build with
gfortran -fcoarray=single
executes fine, hence I suspect the problem to be in the run time library.The program checks its output.
For opencoarrays 1.8.2, I get the run time error
PMR.zip
The text was updated successfully, but these errors were encountered: