Skip to content

Latest commit

 

History

History
201 lines (176 loc) · 10.4 KB

STATUS.md

File metadata and controls

201 lines (176 loc) · 10.4 KB

OpenCoarrays Status

Download as PDF

Download this file as a PDF document here.

Feature Coverage

  • Except as noted under Known Issues, libcaf_mpi supports the following features as described in the Fortran 2008 standard:
    • allocatable and non-allocatable coarrays of intrinsic or derived type
    • synchronization statements
    • atomics
    • locks
    • critical
  • Except as noted under Known Issues, libcaf_mpi supports the collective subroutines proposed for Fortran 2015 in the draft Technical Specification TS 18508 Additional Parallel Features in Fortra subroutines for a limited set of intrinsic types and kinds. Adding additional types and kinds is straightforward. Please submit a request via the Issues page or consider adding the requisite code by forking the OpenCoarrays repository and submitting pull request via GitHub. Also see CONTRIBUTING.md for more information.

Compiler Status

The OpenCoarrays CMake build and test scripts detect the compiler identity, version, and operating system (OS). The scripts use this information to build and test the approproiate functionality for the compiler and OS. Each current compilers' status falls into one of three categories:

* **OpenCoarrays-Aware (OCA) Coarray Fortran (CAF) Compilers** * _Definition:_ The compiler translates CAF statements into OpenCoarrays application binary interface ([ABI]) calls. * _Example_: GNU Fortran 5.1 or later (see for the compiler's CAF status..) * _Use case_: compile most Fortran 2008 coarray programs and some programs that use proposed Fortran 2015 features. * **Non-OCA CAF Compilers** * _Definition:_ The compiler supports CAF but does not generate calls to the OpenCoarrays [ABI]. * _Examples_: Cray compiler (except on CS Series clusters), Intel compiler (except on OS X). * _Use case_: extend the compiler's native CAF using the [opencoarrays module] types and procedures. * **Non-CAF Compilers** * _Definition_: The compiler provides no direct support for CAF, but the user can access a subset of CAF features via use association with the [opencoarrays module], e.g., `use opencoarrays, only : co_sum`. * _Examples_: GNU Fortran 4.9 or any compiler not mentioned above. * _Use case_: Use the OpenCoarrays `caf` compiler wrapper to compile those CAF programs for which the proposed Fortran 2015 collective subroutines cover all of the application's communication requirements.

We have encountered several research applications that match the latter use case. If you encounter difficulties, please submit a bug report or feature request via the Issues page. Also submit a feature request to the relevant compiler technical support.

The OpenCoarrays team offers contract development and support for making compilers OpenCoarrays-aware. If this is of interest, please inform the compiler's technical support as well as the OpenCoarrays team. To contribute code, including documentation and tests, see the CONTRIBUTING.md file. To contribute funding, including funding in support of feature reqeusts, see the Sourcery Store.

Library Status

* **libcaf_mpi** (Default CMake build): Production transport layer that uses the Message Passing Interface ([MPI]) 3.0 one-sided communication, which exploits a hardware platform's native support for Remote Direct Memory Access (RDMA) if available. * **libcaf_x** (where x = [CUDA], [OpenMP], [Pthreads], [OpenSHMEM], etc.): the OpenCoarrays [ABI] design facilitates implementation atop any one of several low-level parallel programming models, vectorization APIs, or combination thereof. We have performed limited evaluations and research development of versions based on multiple APIs. Please email the [OpenCoarrays Google Group] for support with targeting other APIs and hardware, including, for example, graphics processing units (GPUs) and heterogeneous CPU/GPU platforms. * **libcaf_gasnet** (Advanced Make build): Experimental transport layer that is currently out-of-date but might exhibit higher performance than [MPI] on platforms for which [GASNet] provides a tuned conduit. Contact the [OpenCoarrays Google Group] for further information. * **libcaf_single** (Unsupported): developed to mirror the like-named library that is included in GNU Fortran to facilitate compiling single-image (sequential) executables from CAF programs in the absence of a parallel communication library.

Known Issues

Library Issues

  • The opencoarrays module and caf compiler wrapper do not support the square-bracket syntax required for point-to-point communication. This limitation only impacts non-CAF compilers. For a list of other limitations with non-CAF compilers, execute the caf bash script with no arguments. The caf script is installed in the bin subdirectory of the installation path.
  • Efficient strided array transfer works only for intrinsic types.
  • Efficient strided array transfer is not supported for remote-to-remote transfers.
  • Overwriting a coarray with itself is not managed efficiently for strided transfers.
  • Communication
    • Vector subscripts are not yet supported
    • For character assignments, some issues with padding and character kind conversions exist.
    • For array assignments, some issues with numeric type conversion exist.

Compiler Issues

* **GNU** (gfortran) * Derived-type coarrays with allocatable/pointer components are not yet handled properly. * Problems exist with combining array access to a corray with a scalar component access as in `coarray(:,:)[i]%comp`. * An internal compiler error (ICE) occurs with non-allocatable, polymorphic coarrays in `associate` or `select type` statements. * `co_reduce` requires GCC 5.4.0 or later. * `co_reduce` only supports arguments of intrinsic type. * Proper execution of `stop` when `this_image()>1` requires GCC 5.4.0 or later. * No support for type finalization or allocatable components of derived-type coarrays passed to the collective subroutines (e.g., `co_sum`, `co_reduce`, etc.). * Optimization levels other than `-O0` require GCC 5.3.0 or later. * Using `stop` to halt an individual image without halting all images requires GCC 5.4.0 or later. * **Intel** (ifort) * Supported via the [opencoarrays module] only. * **Cray** (ftn) * Supported via the [opencoarrays module] only. * **Numerical Algorithms Group** (nagfor) * Supported via the [opencoarrays module] only. * **Portland Group** (pgfortran) * Supported via the [opencoarrays module] only. * **IBM** (xlf) * Supported via the [opencoarrays module] only.

To-Do List

  • Additional tests and documentation.
  • Improvement of error handling and diagnostics, including but not limited to filling the ERRMSG= variable in case of errors.
  • Providing a diagnostic mode with run-time consistency checks.
  • Better integration with the test cases of GCC. For more information, see the GCC source code files in gcc/testsuite/gfortran.dg/, in particular, the dg-do run tests in coarray*f90 and coarray/).