[MPI3 Fortran] Proposing changes to Fortran 2008

Craig Rasmussen crasmussen at lanl.gov
Wed Mar 19 11:22:15 CDT 2008


I'm not sure your example is relevant for a Fortran API though.  In  
Fortran we like to be safer than using NULL as a valid reference  
point :-).

Seriously though, we have been discussing using the Fortran intrinsic  
C_LOC to obtain the address of a Fortran object to pass to C.  In the  
description of C_LOC is requires that the variable "shall either be a  
contiguous variable with interoperable type and type parameters, or  
be a scalar, ...".

I believe your example:

struct foo {
    char c;
    double d;
}

then passing the address of foo_instance[0].c should work fine in  
Fortran as well under the following restraints:
1. foo_instance in a contiguous array
2. foo in of interoperable type

Cheers,
Craig


On Mar 18, 2008, at 7:16 PM, Jeff Squyres wrote:

> On Mar 18, 2008, at 11:02 AM, Craig Rasmussen wrote:
>
>>> No.
>>
>> Yes!  (sorry, couldn't resist Jeff :-)
>>
>> What you say below is as I expected.  If you have an array of foo,
>> then foo must be contiguous in order for you to be able to stride
>> though it to get at each (noncontiguous) char c.  I don't think we
>> disagree here.  In Fortran, you can take a slice of an array so that
>> the sliced elements aren't contiguous anymore.  The compiler handles
>> this by modifying the array meta-data (stride information), or if
>> necessary when going to C, make a copy.  So in Fortran we have to be
>> a little more careful what we mean by contiguous (and I'm sure I
>> don't fully understand it yet).
>
>
> There is absolutely no requirement for contiguousness of user buffers
> in the C bindings for MPI.
>
> Indeed, you can construct an MPI datatype (map) based off an arbitrary
> reference point in memory (e.g., NULL) and use relative memory offsets
> to describe the layout of the data that you want to access.  Hence,
> the pointer that you pass to MPI_SEND may actually have a memory map
> that spans all over actual memory.
>
> -- 
> Jeff Squyres
> Cisco Systems
>
> _______________________________________________
> mpi3-fortran mailing list
> mpi3-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran




More information about the mpiwg-fortran mailing list