My primary oal is:
We should make clarifications which state that
each predefined handle must be available in every
language binding.
People may be confused by current wording in several places:
- MPI-2.1 (June 23, 2008) Section 16.3.6 MPI Opaque Objects,
page 483, lines 46-47:
"All predefined datatypes can be used in datatype constructors
in any language."
- MPI-2.1 (June 23, 2008) Section 16.3.9 Constants,
page 488, lines 33-35:
"MPI constants have the same value in all languages,
unless specified otherwise. This does not
apply to constant handles (MPI_INT, MPI_COMM_WORLD,
MPI_ERRORS_RETURN, MPI_SUM, etc.) These handles need
to be converted, as explained in Section 16.3.4."
- MPI-2.1 (June 23, 2008) Annex A.1.1 Defined Constants,
page 491, lines 22-23:
"The C and Fortran name is listed in the left column and the
C++ name is listed in the middle or right column."
Proposal:
=========
MPI-2.1 p. 488, lines 33-35 reads:
"MPI constants have the same value in all languages,
unless specified otherwise. This does not
apply to constant handles (MPI_INT, MPI_COMM_WORLD,
MPI_ERRORS_RETURN, MPI_SUM, etc.) These handles need
to be converted, as explained in Section 16.3.4."
but should read:
"MPI constants have the same value in all languages,
unless specified otherwise. This does not
apply to constant handles (MPI_INT, MPI_COMM_WORLD,
MPI_ERRORS_RETURN, MPI_SUM, etc.)
Although these handles (e.g. predefined datatypes)
must exist in all language bindings, their values
may be different in each language binding.
If one wants to use a constant handle from one language binding
(e.g., MPI_DOUBLE from mpi.h) in a call to an MPI function in
another language binding (e.g., in Fortran MPI_SEND), then
these handles need
to be converted, as explained in Section 16.3.4."
Does this help?
Best regards
Rolf
On Thu, 17 Jul 2008 09:03:35 -0500
To make this perfectly clear, should the standard state that the
values of the predefined datatypes from another language are exactly
the same as the value produced by the handle conversion function?
E.g., in Fortran, the value of MPI_INT is what you would get from
MPI_TYPE_C2F( MPI_INT ) (where MPI_INT is the C version). It
should also state that just because Fortran defines MPI_LONG_LONG,
that does not imply that Fortran support an integer type that
corresponds to the C long long type.
Bill
On Jul 17, 2008, at 4:03 AM, Rolf Rabenseifner wrote:
Hi all,
The argument-chain was:
William Gropp wrote:
One piece of relevant text in MPI 2.0 is in section 4.12.6 (in
MPI-2.0) says that "All predefined datatypes can be used in
datatype constructors in any language."
[....]
This text is supported also by:
MPI-2.0 Chap. 10.1.6 page 276 and
MPI-2.0 Annex B.2, page 344 define for all Fortran predefined
datatype handles as C++ counter-part.
In the meeting, there was a consensus (?) that it is a bug
if an MPI implementation does not support, e.g. MPI_INT
in the mpif.h Fortran header file.
(This bug can be found, e.g., in MPICH-2 and will be fixed,
when I understood correctly)
The value (not the name!!) of MPI_INT in mpif.h and mpi.h may be
different, as stated already in MPI-2.0, Sect. 4.12.9.
MPI_INT from C mpi.h cannot be used in a Fortran CALL MPI_SEND(...).
You need to convert, or you must use MPI_INT from Fortran mpif.h.
(I.e. one may distiguish between mixed languages in
one MPI executable [addressed by MPI-2.0 Section 4.12.9],
and sending a message from a Fortran MPI executable to a C MPI
executable and vice versa [see MPI 2.0 Section 4.12.6].)
Because this is already "clearly" defined in MPI-2.0,
you will not find any remark about this in the Change-Log
of MPI-2.1.
MPI-2.2 may make it more clear in the revisiting of datatypes.
Best regards
Rolf
On Thu, 17 Jul 2008 10:20:28 +0200
No, we didn't have them. The request to provide all C datatypes in
Fortran was specified in one of the last meetings. When I remember
correctly, it was specified in the last meeting in Chicago or
the meeting before (I think it was specified together with item 33
of the change log). I implemented it together with the changes
for MPI 2.1 since I assumed that it was contained also in the
change log. After your mail, I recognized that it is only implicitly
mentioned by item 33.
Hubert
Jeff Squyres wrote:
What does NEC MPI do -- do you have MPI_INT and MPI_FLOAT (etc.) in
mpif.h?
On Jul 16, 2008, at 12:57 PM, Hubert Ritzdorf wrote:
What's about the C++ datatypes for complex ?
MPI_COMPLEX and MPI_Double_Complex are already defined for Fortran
datatypes. The complex Fortran datatypes within C++ have a
special
name in order to avoid a name collision.
Hubert
William Gropp wrote:
One piece of relevant text in MPI 2.0 is in section 4.12.6 (in
MPI-2.0) says that "All predefined datatypes can be used in
datatype
constructors in any language." However, the example uses
MPI_Type_f2c ton convert the Fortran handle to the C version
before
passing it into the MPI_Type_create_struct routine, so this text
could be interpreted as allowing the use of those datatypes
through
the handle conversion mechanism without requiring them to be
defined
in each languages header file. Presumably the requirement is that
they be predefined with the value that you'd get from the handle
conversion function?
Bill
On Jul 16, 2008, at 8:18 AM, Hubert Ritzdorf wrote:
Hi,
when I remember correctly, it was decided to provide the C MPI
datatypes
in Fortran since
the Fortran datatypes are supported in C and C++.
Hubert
Jeff Squyres wrote:
I will file a proposal about this if there is a problem, but I
wanted
to ask the group before I did so. In the changelog for MPI-2.1:
2. Section 3.2.2 on page 27, Section 16.1.6 on page 453, and
Annex
A.1
on page 491.
MPI_LONG_LONG_INT, MPI_LONG_LONG (as synonym),
MPI_UNSIGNED_LONG_LONG,
MPI_SIGNED_CHAR, and MPI_WCHAR are moved from optional to
official
and they
are therefore defined for all three language bindings.
Note that it says that these C datatype names must be in all
three
language bindings.
Are C MPI datatypes supposed to be available in Fortran? I
looked
in
mpif.h for Open MPI, MPICH2, HP MPI, and Intel MPI, and I didn't
see C
MPI datatypes in there (e.g., MPI_INT and MPI_FLOAT).
So:
- is there language somewhere in MPI that says that C
datatypes are
not supposed to be in mpif.h? (and therefore the MPI-2.1
changelog
is
wrong)
or
- are all 4 of the above MPI's wrong for not including the C
datatypes
in mpif.h?
--Jeff Squyres
Cisco Systems
_______________________________________________
mpi-22 mailing list
<smime.p7s><ATT00001.txt>
William Gropp
Paul and Cynthia Saylor Professor of Computer Science
University of Illinois Urbana-Champaign
------------------------------------------------------------------
------
_______________________________________________
mpi-22 mailing list
_______________________________________________
mpi-22 mailing list
--Jeff Squyres
Cisco Systems
_______________________________________________
mpi-22 mailing list
Dr. Rolf Rabenseifner . . . . . . . . . .. email
High Performance Computing Center (HLRS) . phone
++49(0)711/685-65530
University of Stuttgart . . . . . . . . .. fax ++49(0)711 /
685-65832
Head of Dpmt Parallel Computing . . .
www.hlrs.de/people/rabenseifner
Nobelstr. 19, D-70550 Stuttgart, Germany . (Office: Allmandring 30)
_______________________________________________
mpi-22 mailing list
William Gropp
Paul and Cynthia Saylor Professor of Computer Science
University of Illinois Urbana-Champaign
High Performance Computing Center (HLRS) . phone ++49(0)711/685-65530
University of Stuttgart . . . . . . . . .. fax ++49(0)711 / 685-65832
Nobelstr. 19, D-70550 Stuttgart, Germany . (Office: Allmandring 30)
_______________________________________________
mpi-22 mailing list