Re: [MPI3 Fortran] Non-contiguous arrays (was Re: Argument data sizes)
Iain Bason wrote:
On Sep 18, 2008, at 1:13 PM, Jeff Squyres wrote:
How else would you do it efficiently for non-contiguous datatypes without a copy (which would be quite Bad for multiple reasons, especially for very large datasets)? Such issues are certainly not unique to C (even in very large Fortran arrays, particularly if you want to send just a plane from the middle of a 3D array, or somesuch). As another example of where datatypes are useful: with the Fortran equivalent of C structs, you need to build up a composed datatype to describe the message that you want to send/receive.
Didn't this come up in another thread? In Fortran, you can use assumed shape arrays to pass these sorts of data without copying. It would be nice if MPI could take advantage of that in order to make life easier for Fortran programmers.
The extensions being proposed for Fortran/C interoperability help with this. The user can specify bind(c) on an interface with an assumed-shape argument. Or an assumed-rank argument, with the dimension(..) syntax. The argument gets passed as a descriptor (the address of the descriptor for the C folk) and the vendor supplies C library routines that let the C callee extract information from the descriptor about the described array, like base address, element size, rank, bounds/strides.... A C wrapper could decode this information and send/receive the data in as many contiguous chunks as required, all hidden from the Fortran user. Cheers, Bill
Iain
-- Bill Long [email protected] Fortran Technical Support & voice: 651-605-9024 Bioinformatics Software Development fax: 651-605-9142 Cray Inc., 1340 Mendota Heights Rd., Mendota Heights, MN, 55120
participants (1)
-
Bill Long