(j3.2006) OpenCoarrays

Dan Nagle danlnagle
Thu Aug 21 11:45:56 EDT 2014



The work of Alessandro Fanfarillo (mostly library) and Tobias Burnus
(mostly compiler) has resulted in a library implementing the transport
layer for the GCC 4.10 (now known as GCC 5.0) compiler.

See http://opencoarrays.org
To download the OpenCoarrays library source, use the following:
git clone https://bitbucket.org/sourceryinstitute/opencoarrays.git

OpenCoarrays is an open-source software project for developing, porting,
and tuning transport layers that support Fortran coarray compilers.  The
current version is considered experimental with limited documentation and
build infrastructure.  It does have extensive integration tests in
benchmarks, scientific applications, and application kernels.

The library is available under a BSD-style license.

Alessandro and Tobias remark that the following should be noted
regarding the current state of the library:

On the compiler side, any GCC 5 (formerly, 4.10) compiler after 2014-06-17
should have most of the required bits.
Subsequent work added the following:
2014-06-19 added co_min/co_max/co_sum support,
2014-07-12 added atomics support and
2014-08-14 added support for CRITICAL.

Of course, the newer the better.  https://gcc.gnu.org/wiki/GFortranBinaries
provides some instructions for how to build GCC from scratch, it also links
to Windows (MinGW/MinGW-w64) builds and to the Linux (32 and 64 bits)
nightly builds.

Additionally, now that GCC 5.0 is known to be the name of the current
compiler, MacPorts has created a gcc410 package, see
https://trac.macports.org/browser/trunk/dports/lang/gcc410 -
the version is 20140727 and, thus, new.

There are several versions of the library, each with a different transport
layer.  The MPI version has the widest coverage of the coarray features; it
is the easiest to install and use.  It requires at least a standard MPI-2.0
implementation.  An MPI-3.0 implementation is preferable.  The MPI
transport layer is also the most updated version and it is intended as the
default for the coarray support in gfortran.

OpenCoarrays provides two more libraries based on GASNet and ARMCI,
respectively. The GASNet version is provided as an expert version.
Currently, it is experimental and some of the coarray features provided by
the MPI version are not implemented yet.  The ARMCI version is a draft and
it does not provide reliable communication support. Libraries using other
transport layers might be added in the future.


Coarray support in the compiler: Nearly complete Fortran 2008 coarray
support and support of the following bits of the new features proposed for
inclusion in the draft of the next Fortran standard
(see ftp://ftp.nag.co.uk/sc22wg5/N2001-N2050/N2007.pdf)
all atomics and the co_sum/co_min/co_max collectives. However, the
following of the Fortran 2008 revision is not yet working:

* Locking is unimplemented except for the working CRITICAL.
(Tobias is currently trying to make some progress with locking but it will
still take a couple of days. The basic infrastructure is there.) ? Caveat:
Using locking will silently succeed ineffectively as it is currently

* Coindexed access to allocatable and pointer components of coarrays is not

* Coindexed array access to scalar components of coarrays will not work

* ASSOCIATE and SELECT TYPE won't work with nonallocatable coarray dummy

* Vector subscripts and numeric type conversion is implemented but untested
? and, hence, probably will have some bugs.

See also https://gcc.gnu.org/wiki/Coarray

For the implementation status of the library, see

Alessandro expects to present a paper at PGAS 2014, and a poster at ACMSRC
at PACT 14.

We gratefully acknowledge the support of UCAR/NCAR, CINECA, NERSC, and
the University of Rome 'Tor Vergata'.
Alessandro also acknowledges support as a Google Summer of Code project.

For more information please join the OpenCoarrays Google Group
at https://groups.google.com/forum/#!forum/opencoarrays/join


Dan Nagle

More information about the J3 mailing list