Skip to content

Support GCC 8 & expand Fortran 2018 C-interoperability

Compare
Choose a tag to compare
@rouson rouson released this 31 May 15:36
2.1.0
a30c312

Github Releases (by Asset) Build Status license Twitter URL

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 descriptor struct.
  • 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 by CFI_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:

  1. It facilitates the file's use with compilers that don't yet provide the file.
  2. 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


GitHub forks GitHub stars GitHub watchers Twitter URL