Yes, my explanation is wrong -- mea culpa. The issue is not whether the
compiler does global register optimization -- the issue is what the compiler
does when a "foreign" routine is invoked. If the compiler has no information
on that routine, it must assume that routine can touch any part of the memory.
If this is not so, then blocking and nonblocvking send and receives will not
work as well. So the question is: do we have any way of forcing a compiler to
store variables back from registers to their permanent memory location before
a "foreign" subroutine is invoked? Otherwise, any memory buffer used in ANY
MPI communication must be declared VOLATILE.
IBM T.J. Watson Research Center
P.O. Box 218, Yorktown Heights, NY 10598