Download this file as a PDF document here.
- 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.
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.
* **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.- 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 thecaf
bash script with no arguments. Thecaf
script is installed in thebin
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.
- 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, thedg-do run
tests incoarray*f90
andcoarray/
).