我想使用fortran协同数组功能在不同图像上具有不同大小的数组。
遵循2008/2018标准,这应该可以通过使用包含可分配的派生类型来实现。我在macOS Mojave上使用带有opencoarrays 2.3.1.1 MPI库的gfortran 8.2.0。
program Main
implicit none
type :: Array_Type
double precision, dimension(:), allocatable :: values
end type
type(Array_Type), codimension[*] :: array
if(this_image() == 1) then
allocate(array%values(2))
array%values = this_image()
else
allocate(array%values(1))
endif
sync all
print *, this_image(), array[1]%values(:)
sync all
end program
该程序由
编译gfortran -Wall -fcoarray=lib Main.f90 -lcaf_mpi
当其他图像访问分配的数组时,一个甚至更简单的示例也会导致相同的分段错误。
program Main
implicit none
type :: Array_Type
double precision, dimension(:), allocatable :: values
end type
type(Array_Type), codimension[*] :: array
allocate(array%values(2))
sync all
print *, this_image(), array[1]%values(:)
sync all
end program
答案 0 :(得分:1)
解决方案
只要在OpenCoarrays中使用MPICH而不是默认的OpenMpi,代码就可以在指定的系统上正常工作。
另外,应使用OpenCoarrays编译器包装器:caf Main.f90
我在OpenCoarrays GitHub网站上打开了一个问题:https://github.com/sourceryinstitute/OpenCoarrays/issues/625