Support GCC 8 & expand Fortran 2018 C-interoperability
Enhancement
GCC 8 Support
This is the first release that supports GCC 8. The new install.sh
patches GCC 8.1.0 when building GCC from source (e.g., via ./install.sh -p gcc -z -I 8.1.0
). The patch partially reverts a gfortran commit that occurred just before GCC 8 released and blocked OpenCoarrays builds. 🤕
Fortran 2018 C-Interoperability
This release adds the Fortran 2018 Draft International Standard's ISO_Fortran_binding.h
C header file, containing prototypes for functions that C programs may use to manipulate interoperable Fortran data objects by exploiting metadata describing the type, rank, extents, contiguity, and other information about the object. OpenCoarrays now builds and installs a library containing eight functions described in ISO_Fortran_binding.h
:
CFI_allocate
,CFI_deallocate
. Allocate or deallocate Fortran allocatable variables. 🐏CFI_establish
. Establish the metadata necessary to access Fortran variables inside a C descriptorstruct
.CFI_address
. If a C descriptor describes a scalar variable, find its address. If it describes an array, find the address of the element with column-major (Fortran ordering) indexing. 🏠CFI_is_contiguous
. Determine whether a Fortran array is contiguous.CFI_select_part
. Update a C descriptor to select an element or contiguous elements of a Fortran derived type. The variable whose part is selected could be an array section of derived type. 🚣♀️CFI_section
. Update a C descriptor to select a section of an array. The array can be of interoperable derived types. The array can also be composed of elements of a derived type, i.e., a C descriptor updated byCFI_select_part
. The array can also be a section.CFI_setpointer
: Update a C descriptor to point at a Fortran variable. 🏹
Releasing ISO_Fortran_binding.h
in OpenCoarrays accomplishes several goals:
- It facilitates the file's use with compilers that don't yet provide the file.
- It aligns with moving toward using the standard descriptors in
- The OpenCoarrays parallel application binary interface (ABI) provided for coarray compilers and
- The OpenCoarrays application programming interface (API) for use with non-coarray compilers.
The API is the opencoarrays module. The ABI is in libcaf.h.
Other Enhancements
- A new list of Frequently Asked Questions (FAQ.md) and their answers. 🕵️♀️
- New unit tests that expose issues #511 and #322.
Bug fixes
This release
- Fixes issue #515 related to an OpenCoarrays bug exposed by the coarray equivalent of
MPI_Gatherv
. 🌱 - Fixes issue #522 that caused an MPICH test to fail. ⚾️
- Fixes issue #518, a regression caused by GCC 8, which uses new internal descriptors for Fortran data objects. 🔍
- Fixes issue #427 regarding remote indirect addressing via a variable cosubscript (
xv(loc_idx(1:nhl,ip)) = xv(rmt_idx(1:nhl,ip))[xchg(ip)]
). 📩
Installation
Please see the installation instructions for more details on how to build and install this version of OpenCoarrays