Fortran 2018 coarray quick start

Fortran coarrays are an abstract, higher-level construct than using OpenMPI directly. Coarrays support multiple parallel processing libraries including OpenMPI. Much simpler Coarray vs. OpenMPI syntax makes debugging easier in general. Gfortran, Cray and Intel are among the compilers supporting Fortran 2018 coarray features so useful in high-performance computing.

Install

Coarray Fortran as enabled in Fortran 2008 / Fortran 2018 standards is available from multiple compilers. Compilers with built-in coarray support (not needing external libraries) include:

  • Intel ifort
  • Cray ftn

The OpenCoarrays library is popular for enabling coarray features in compilers including:

  • GNU gfortran

Gfortran

Install Fortran OpenCoarrays library for Gfortran by:

Ubuntu 18.04 / Debian Stretch 9 / Raspberry Pi

apt install gfortran libcoarrays-dev libopenmpi-dev open-coarrays-bin

Ubuntu 16.04 / MacOS: using Homebrew

brew install gcc opencoarrays

When manually compiling, add -fcoarray=lib and -lcaf_mpi. For example:

gfortran -fcoarray=lib myfun.f90 -lcaf_mpi

When manually running use cafrun like:

cafrun -np 4 ./myprog

Intel Fortran

ifort Fortran 2018 standard support includes coarrays.

ifort -coarray

enables the coarray features.

CMake

OpenCoarrays includes CMake scripts. CMake itself can recognize generic coarray support with FindCoarray.cmake

An example top-level CMakeLists.txt using Fortran coarray contains:

find_package(Coarray REQUIRED)

add_executable(coarray_pi pi.f90)
target_compile_options(coarray_pi PRIVATE ${Coarray_COMPILE_OPTIONS})
target_link_libraries(coarray_pi ${Coarray_LIBRARIES})

add_test(NAME CoarrayPi
COMMAND ${Coarray_EXECUTABLE} ${Coarray_NUMPROC_FLAG} ${Coarray_MAX_NUMPROCS} ./coarray_pi)

Examples

Fortran coarray examples includes CMakeLists.txt for Fortran coarrays.

Notes