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

Reply via email to