gpt4 book ai didi

fortran - 为什么具有可分配组件的 coarray 在从不同图像访问时会产生分割错误?

转载 作者:行者123 更新时间:2023-12-02 02:47:08 25 4
gpt4 key购买 nike

我想使用 fortran coarray 功能在不同的图像上使用不同大小的数组。

根据 2008/2018 标准,这应该可以通过使用包含可分配的派生类型来实现。我在 macOS Mojave 上使用 gfortran 8.2.0 和 opencoarrays 2.3.1.1 MPI 库。

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

最佳答案

解决方案

只要将 MPICH 而不是默认的 OpenMpi 与 OpenCoarrays 一起使用,代码就可以在指定的系统上正常工作。

此外,应该使用 OpenCoarrays 编译器包装器:caf Main.f90

我在 OpenCoarrays GitHub 站点上开了一个问题:https://github.com/sourceryinstitute/OpenCoarrays/issues/625

关于fortran - 为什么具有可分配组件的 coarray 在从不同图像访问时会产生分割错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54067382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com