Comments on gfortran, coarrays, MPI etc.
Salvatore Filippone
salvatore.filippone@uniroma2.it
Wed Mar 31 08:52:00 GMT 2010
N.M. Maclaren ha scritto:
> One way that this could be done is for all images to start a non-blocking
> receive at the start of each segment, and to use that to receive messages
> from another image that wanted to transfer data. Every time an image
> reached any coarray access or synchronisation point, it would check for
> any outstanding messages, do the relevant work and restart the message
> receive.
>
A smilar scheme should also (probably) be used for the sends, using
non-blocking ones, and checking for completion whenever a chance comes
up.
One BIG issue is buffering: how much space do you allocate for the
non.blocking receive? Do you want to go into the business of splitting
data into packets? Static analysis from the compiler would be useful
here but far from complete.
Somehow I doubt you want to go down the path of issuing PROBEs every
other machine cycle....
> That is essentially just the normal MPI progress engine design exposed
> to the program, and is almost certainly the way that one-sided
> communication will be implemented on most distributed memory systems
> (except that the entity that receives the messages will often be a
> service thread, and not the main computation thread).
Basicallly we would need to define a protocol on top of MPI for our
purposes. I've done so for specific application domains, where you can
do data preprocessing to guarantee you know what you need, but here
we're talking something much more general....
Salvatore
More information about the Fortran
mailing list