On 12.09.2014 18:10, Manuel López-Ibáñez wrote:
Hi Maxim, Many thanks for your leadership and hard work administering this.
Also thanks from my side.
I would be interested in reading about the results of the projects and
evaluations. Please student (and mentors), could you provide some
details?
Let me write a few words regarding the Alessandro's coarrays project.
Coarrays are a way to parallelize programs; conceptually, they are about
distributed memory as each process (called image) has its own memory
except for certain variables – called coarrays – which are available on
all images/processes. They act as local (remote accessible) variable –
unless one explicitly accesses remote memory using the image index of a
remote process. The scheme is known as Partitioned Global Address Space
- short PGAS - and other languages also know that, such as Universal
Parallel C (UPC) and, I think, Chapel, Fortress and X10.
Coarrays are a new feature in the Fortran 2008 standard and are being
extended (collectives, teams, events etc.) in a Technical Specification
(TS18508), which will be part of Fortran 2015.
On the GCC/gfortran side, some initial support has been added in 4.6 and
4.7, but the multi-image support has never materialized. And a parallel
feature which only works on a single process is kind of boring.
Enter Alessandro: Starting a bit before GSoC, but mostly during and as
GSoC work, he worked on the library side of coarrays, ensuring that the
communication actually happens. (At the same time, his progress forced
me to add some missing bits to the compiler itself.)
While there are still some issues – both on the library and on the
compiler side, coarrays now mostly work! The basic features are all
there and the performance is also competitive. That was also also part
of Alessandro's work: To measure and to decide which communication
library should be used. Currently, MPI and GASNet are the supported
backends.
For the comparison with other implementations and the scaling, see:
http://opencoarrays.org/yahoo_site_admin/assets/docs/Coarrays_GFortran.217135934.pdf
For the current status and usage https://gcc.gnu.org/wiki/Coarray and
the links there in.
Coarrays were (albeit with a slightly different syntax) supported for a
long time in the Cray compiler – but only recently with the Fortran 2008
syntax. Additionally, the Intel compiler has an implementation which is
known to be slow. (I assume that will now change.) Hence, there aren't
not that many coarray programs. However, there is definitely interest by
the developers – such that the feature will likely become more popular.
Outlook on the gfortran side: Locking is not yet implemented on the
compiler side (not crucial as one has synchronization and atomics, but
still) – nor are allocatable/pointer derived-type components ('struct
elements') *of* coarrays, which will then also require more work on the
library side. And completely missing are some of the nifty features of
the upcoming Technical Specification.
One of the next items is in any case the new array descriptor, which is
a different project but would help with some of the issues we have with
array access to components of array coarrays
Tobias