[MPI3 Fortran] Straw vote on integers kinds

Craig Rasmussen crasmussen at newmexicoconsortium.org
Tue Sep 15 10:05:30 CDT 2009


On Sep 14, 2009, at 12:50 PM, Lionel, Steve wrote:

> I vote for #4.  This encourages good programming practice but allows  
> programmers the option of omitting the kind in most circumstances.   
> The wording of choice 2 is unreasonably restrictive, I believe,  
> unless it is suggesting that vendors may not provide generics or  
> promotion features.

Yes, two is meant to be restrictive (thus choice 4, which is an  
unrestricted 2).

-craig


>
>
> Steve Lionel
> Intel Developer Support
> Nashua, NH
>
>
>
> From: mpi3-fortran-bounces at lists.mpi-forum.org [mailto:mpi3-fortran-bounces at lists.mpi-forum.org 
> ] On Behalf Of Craig Rasmussen
> Sent: Monday, September 14, 2009 1:05 PM
> To: MPI-3 Fortran working group
> Subject: [MPI3 Fortran] Straw vote on integers kinds
> Importance: Low
>
> I've fixed the wiki to better represent current thinking and cleaned  
> up and added example code.   I think we are pretty close to having  
> most of the issues resolved.  We still must come to terms with what  
> to do with integer kinds.  In the wiki, I've listed four  
> possibilities; three of them have come up in recent discussions.   
> I've listed them below, also see https://svn.mpi-forum.org/trac/mpi-forum-web/wiki/FtnWikiPage
>
> Please vote for one of the options.  My personal view is that we  
> need to open up the question to the entire MPI Forum to get reaction  
> from a larger community (not just Fortran geeks).  I'll do this at  
> the next meeting in Portland.
>
> Use the default integer kind. This has the least impact on existing  
> codes. This causes problems when the size of default integers are  
> promoted for user code and not also in the MPI library.
> Specify a named kind, e.g., MPI_INT_KIND. This provides the most  
> specificity and the user will have a known way to code that will  
> work under all circumstances. But this will cause problems for  
> existing codes when compiler options are used that change the size  
> of default integers.
> Require the vendor to provide two interfaces, one for standard  
> integers and one for long integers. This option works when integers  
> are promoted and doesn't break existing codes.
> Specify a named kind in the Fortran interface (MPI_INT_KIND) but  
> allow the vendor a choice as to how to address integer promotion (it  
> would become a quality of implementation issue) if users use default  
> integers in their codes. The vendor could provide an additional  
> interface for promoted integers (not part of the MPI standard) or  
> could provide a separate library to link against.
> -----------
>
> I vote for number 4.  I believe that a standard should provide  
> specificity to the programmer.  If the programmer uses MPI_INT_KIND,  
> his/her program will always work even if integers are promoted or  
> C_INT doesn't match up with default integers.  Since users will have  
> to change existing codes anyway (to use the new derived types, e.g.,  
> MPI_Comm) users can make the transition to specific kinds at this  
> time.  However, I also think the standard should also leave room for  
> vendors to provide additional integer kinds via generics or separate  
> compilation libraries.
>
> -craig
>
> On Sep 2, 2009, at 11:30 AM, Lionel, Steve wrote:
>
>
> Craig wrote:
>
>
> I've been back and forth on this (as well as a few others I think).
> I'm currently leaning toward using default integers.  Primarily
> because to do otherwise could potentially break countless lines of
> users code.
>
> No, it won't, as long as the choice for the MPI integer kind matches  
> C_INT, which is pretty much universal for default integer in Fortran  
> implementations.
>
> Let me try an example.
>
> module MPI
> use, intrinsic :: ISO_C_BINDING
> integer, parameter :: MPI_INT_KIND = C_INT
>
> interface
> subroutine MPI_SUB (INTARG)
> import ! Makes the definition of MPI_INT_KIND visible here
> integer(MPI_INT_KIND), intent(IN) :: INTARG
> end subroutine MPI_SUB
> end module MPI
>
>
> User code:
>
> program test1
> use MPI
> integer SOMEVAR1
> call MPI_SUB (SOMEVAR1)
> end
>
> This is the "existing code" case.  The compiler will have a kind for  
> "default integer" - the number chosen for this kind value varies by  
> implementation (usually 4 but not always) - let's say it's 4 here.   
> For this combination of Fortran and a "companion C processor", C_INT  
> is also 4, and thus so is MPI_INT_KIND.  The declaration of SOMEVAR1  
> does not specify a kind, so it gets "default integer" or 4.  No  
> problem yet.
>
> Now let's say that this user has decided to compile her Fortran code  
> with an option that changes the default integer kind to 8 (-i8 or  
> similar).  Now if the above code is compiled, there will be an error  
> because the module, assuming it wasn't also compiled -i8, defines  
> the argument as INTEGER(4) but SOMEVAR1 is now INTEGER(8).  The user  
> may have had a reason to use -i8 for other variables and now needs  
> to figure out what to do.  She reads the source of the MPI module,  
> but if it just says INTEGER with no KIND value, she may be at a loss  
> to figure out what to change.
>
> If it had been written like this:
>
> program test2
> use MPI
> integer(MPI_INT_KIND) SOMEVAR2
> call MPI_SUB (SOMEVAR2)
> end
>
> The call with SOMEVAR2 is ok in either case, because the explicit  
> kind overrides the default integer kind in effect.
>
> Explicitly specifying the KIND value in the module helps  
> documentation and encourages, but does not require, the programmer  
> to specify the KIND value in their own code.  It does no harm and  
> does not force coding changes that wouldn't be needed otherwise.   
> Using explicit kinds also helps make the code understandable.
>
> Regarding functions and subroutines, I think I would need a bit more  
> background on the earlier discussion. I'll be glad to help on this  
> and perhaps a phone call with you and Jeff would be in order when  
> convenient.
>
>
> Steve Lionel
> Intel Developer Support
> Nashua, NH
>
>
>
>
> _______________________________________________
> mpi3-fortran mailing list
> mpi3-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran
>
> _______________________________________________
> mpi3-fortran mailing list
> mpi3-fortran at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-fortran

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-fortran/attachments/20090915/eee145f6/attachment-0001.html>


More information about the mpiwg-fortran mailing list