Coarray usage resources

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

2 Likes