Thanks for mentioning me and pointing to my Githubs. Nevertheless, much has changed and things are still changing with my coarray programming and I am currently preparing for completely different ways to program with Coarray Fortran: Channels and coroutines.
Simply said, channels allow non-blocking data transfer between coroutines (the blocking is surrounding the coroutines), and groups of coroutines do execute on the same threads (coarray images) at the same time (in constant change): If one group of coroutines must wait with further execution until a data transfer through a channel has completed, another group of coroutines (that uses a different channel for the data transfer between them) can still execute on the same coarray images. Advantages should be a boost of performance (each coarray image does always execute some portion of a task) and a safe and simple parallel programming style (using channels, coarrays and the required synchronizations are hidden).
It is still raw prototyping yet but it works the same with ifort and Gfortran/OpenCoarrays. (Gfortran/OpenCoarrays has some advantages yet). I did not try with the NAG compiler yet.
My current plans for upcoming Github repositories are:
- Implementing coroutines with Coarray Fortran
- A new type of synchronization method to implement channels with Coarray Fortran
- Implementing channels based on coarrays
- Implementing a Fragmented Objects model with Coarray Fortran
cheers