Почему coarray с размещаемым компонентом создает ошибки сегментации при доступе из другого изображения? - PullRequest
0 голосов
/ 07 января 2019

Я хочу использовать функцию Fortran Coarray, чтобы иметь разные массивы на разных изображениях.

В соответствии со стандартом 2008/2018 это должно быть возможно с использованием производного типа, содержащего размещаемый объект. Я использую gfortran 8.2.0 с opencoarrays 2.3.1.1 библиотеку MPI на MacOS Mojave.

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

1 Ответ

0 голосов
/ 14 января 2019

Решение

Код корректно работает с указанной системой, если в OpenCoarrays используется MPICH вместо стандартного OpenMpi.

Кроме того, следует использовать оболочку компилятора OpenCoarrays: caf Main.f90

Я открыл проблему на сайте OpenCoarrays GitHub: https://github.com/sourceryinstitute/OpenCoarrays/issues/625

...