[MPI3 Fortran] Argument data sizes

Bill Long longb at cray.com
Thu Sep 18 17:38:57 CDT 2008



Craig Rasmussen wrote:
>
> However, it is within our purview to discuss how to best represent 
> this size in Fortran.  I'm going to take a straw poll on this matter.  
> Please choose one of the following choices:
>
> 1. A constant kind value defined by the implementation, e.g., 
> MPI_SIZE_KIND,
>          integer(MPI_SIZE_KIND) :: count
>     It is expected that MPI_SIZE_KIND be the same kind as a default 
> integer
>

This one is appealing, except I'd prefer that the "it is expected" bit 
specify C_intptr_t.


-------------------------------------------

On Sep 18, 2008, at 5:10 PM, Jeff Squyres wrote:



 >What do Fortran app developers / usually do in this case?  Do they 
ship multiple versions of their libraries?  Or do they tend to only 
support either -i4 or >-i8 (but not both)?

I've seen both ways used. As noted earlier, if the user specifies -i8, 
the compiler can automatically find the right library if it is part of 
the programming environment package.  (Actually, we only allow the case 
where both -r8 and -i8 are specified, not just one.)

The library I'm personally involved with is more rigid. All of the dummy 
arguments have explicit kind values and there is a module that the user 
has to use (since the library procedures are module procedures).  If the 
user supplies the wrong kind of argument, he gets an error.



 >Does it happen often/ever that there's multiple libraries that must be 
linked together in a single application, and not all of them are 
available at the same -iX >value?

The compiler can detect if a module was compiled with different -i8 / 
-r8 switches compared to the procedure using the module.  This catches a 
lot of errors up front.  If the program is linked with -i8 -r8, the load 
path is automatically adjusted to point to the 64-bit versions of vendor 
supplied libraries.  Apart from that, the user is responsible for 
linking in the right library if there are multiple versions. 

In general, the use of switches like -i8 and -r8 is mainly a legacy 
issue.  Newer codes tend to have a 'precision' module that defines 
symbolic names for the desired integer and real kinds, and all the 
declarations use these.  They also use IMPLICIT NONE to avoid missing a 
variable declaration.

Cheers,
Bill


-- 
Bill Long                                   longb at cray.com
Fortran Technical Support    &              voice: 651-605-9024
Bioinformatics Software Development         fax:   651-605-9142
Cray Inc., 1340 Mendota Heights Rd., Mendota Heights, MN, 55120

            




More information about the mpiwg-fortran mailing list