[MPI3 Fortran] Serious problem/bug in MPI libraries with the alignment of MPI_DOUBLE_PRECISION

Bill Long longb at cray.com
Fri Oct 7 10:07:55 CDT 2011



On 10/6/11 6:55 PM, Rolf Rabenseifner wrote:

> ________
>
> mpi-report-F2008-2011-09-08-changeonlyplustickets.pdf
> p87:7-11 (=MPI-2.2 p79:7-11) read
>
>    Rationale. The definition of extent is motivated by the assumption that the amount
>    of padding added at the end of each structure in an array of structures is the least
>    needed to fulfill alignment constraints. More explicit control of the extent is provided
>    in Section 4.1.6. Such explicit control is needed in cases where the assumption does
>    not hold, for example, where union types are used.
>    (End of rationale.)
>
> but should read
>
>    Rationale. The definition of extent is motivated by the assumption that the amount
>    of padding added at the end of each structure in an array of structures is the least
>    needed to fulfill alignment constraints. More explicit control of the extent is provided
>    in Section 4.1.6. Such explicit control is needed in cases where the assumption does
>    not hold, for example, where union types are used.
> * In Fortran, structures can be expressed with several language features, e.g.,
> * common blocks, SEQUENCE derived types, or BIND(C) derived types. The compiler may

or derived types that are neither SEQUENCE nor BIND(C) types (which is 
the most common case).


> * use different alignments, and therefore, it is recommended to use MPI_TYPE_CREATE_RESIZED
> * for arrays of structures if an alignment may cause an alignment-gap at the end of
> * a structure as described in Section 4.1.6 on page 106 and in Section 16.2.15 on page 580.
>    (End of rationale.)
>
>
> ________
>
> mpi-report-F2008-2011-09-08-changeonlyplustickets.pdf
> p107:13-17 (=MPI-2.2 p96:42-45) read
>
>    If type_i requires alignment to a byte address that is a multiple of k_i, then epsilon
>    is the least non-negative increment needed to round extent(Typemap) to the next multiple
>    of max_i k_i.
>    The formal definitions given for the various datatype constructors apply now,
>    with the amended definition of extent.
>
> but should read
>
>    If type_i requires alignment to a byte address that is a multiple of k_i, then epsilon
>    is the least non-negative increment needed to round extent(Typemap) to the next multiple
>    of max_i k_i.
> * In Fortran, whether the alignments k_i are computed according to the alignments
> * used by the compiler in common blocks, SEQUENCE derived types, or BIND(C) derived types,

again, or derived types that are neither SEQUENCE nor BIND(C).

> * is implementation-dependent.
>    The formal definitions given for the various datatype constructors apply now,
>    with the amended definition of extent.
>

Cheers,
Bill

-- 
Bill Long                                           longb at cray.com
Fortran Technical Support    &                 voice: 651-605-9024
Bioinformatics Software Development            fax:   651-605-9142
Cray Inc./Cray Plaza, Suite 210/380 Jackson St./St. Paul, MN 55101





More information about the mpiwg-fortran mailing list