Dear All,
I fixed the patch.
(MPI::Fint etc.)
So, please replace the patch.
Best regards.
---------------
Yuki MATSUMOTO
MPI development team,
Fujitsu
(2011/12/09 11:35), Y.MATSUMOTO wrote:
Dear Jeff and all,
Thank you for your comment.
I'm sorry for not replying sooner.
1:MPI::Fint
We checked C++ header using MPI-2.1 standard.
So, it doesn't need MPI::Fint definition.
(Please remove it!)
2:MPI::Grequest::Start
Sorry! I send you incorrect list.
Best regards.
---------------
Yuki MATSUMOTO
MPI development team,
Fujitsu
(2011/12/06 1:35), Jeff Squyres wrote:
Many thanks for the patch!
Two minor points:
1. I do not believe that MPI::Fint exists. It's surprising, but I'm pretty sure we
double checked this back in the MPI-2.2 timeframe and came to the conclusions that a)
it does not exist, and b) it should not exist, because all C++<--> Fortran
interaction is supposed to go through the C translation routines.
2. Grequest::Start is a static function on the MPI namespace -- it is not marked
"const" in MPI 2.1 or 2.2 (I don't see it in the patch, either).
On Dec 4, 2011, at 9:31 PM, Y.MATSUMOTO wrote:
Dear all,
We send next feed back.
It's about C++ header file.
In ompi/mpi/cxx/*.h,
Some definitions of return code, type and function are lacked or incorrect.
Attached patch fixes them (This Patch is for V1.4.X).
Following list is what is lacked and incorrect.
*Undefined return code
--------------------------------------------------
MPI::ERR_ACCESS
MPI::ERR_AMODE
MPI::ERR_ASSERT
MPI::ERR_BAD_FILE
MPI::ERR_CONVERSION
MPI::ERR_DISP
MPI::ERR_DUP_DATAREP
MPI::ERR_FILE_EXISTS
MPI::ERR_FILE_IN_USE
MPI::ERR_FILE
MPI::ERR_INFO
MPI::ERR_IO
MPI::ERR_LOCKTYPE
MPI::ERR_NOT_SAME
MPI::ERR_NO_SPACE
MPI::ERR_NO_SUCH_FILE
MPI::ERR_PORT
MPI::ERR_QUOTA
MPI::ERR_READ_ONLY
MPI::ERR_RMA_CONFLICT
MPI::ERR_RMA_SYNC
MPI::ERR_SIZE
MPI::ERR_UNSUPPORTED_DATAREP
MPI::ERR_UNSUPPORTED_OPERATION
--------------------------------------------------
*Undefined data type
--------------------------------------------------
MPI::LONG_LONG_INT
MPI::Fint
MPI::F_DOUBLE_COMPLEX
--------------------------------------------------
*Undefined function
--------------------------------------------------
MPI::Datatype::Create_darray
MPI::Datatype::Pack_external
MPI::Datatype::Pack_external_size
MPI::Datatype::Unpack_external
MPI::Add_error_class
MPI::Add_error_code
MPI::Add_error_string
MPI::Datatype::Create_f90_complex
MPI::Datatype::Create_f90_integer
MPI::Datatype::Create_f90_real
MPI::Datatype::Match_size
--------------------------------------------------
*Incorrect of definitions
(MPI-2.1 standard defines these as "const", but they are not "const" in code)
--------------------------------------------------
MPI::Intercomm::Merge
MPI::Cartcomm::Sub
MPI::Grequest::Start
--------------------------------------------------
*Incorrect of definitions
(MPI-2.1 standard defines these as not "const", but they are "const" in code)
--------------------------------------------------
MPI::Comm::Set_errhandler
MPI::File::Set_errhandler
MPI::Win::Set_errhandler
--------------------------------------------------
Best regards.
--------------
Yuki MATSUMOTO
MPI development team,
Fujitsu
<Cplusplus-header.patch>_______________________________________________
devel mailing list
de...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel
_______________________________________________
devel mailing list
de...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel
Index: ompi/mpi/cxx/comm.h
===================================================================
--- ompi/mpi/cxx/comm.h (revision 25570)
+++ ompi/mpi/cxx/comm.h (working copy)
@@ -382,7 +382,7 @@
static Errhandler Create_errhandler(Comm::Errhandler_fn* function);
- virtual void Set_errhandler(const Errhandler& errhandler) const;
+ virtual void Set_errhandler(const Errhandler& errhandler);
virtual Errhandler Get_errhandler() const;
Index: ompi/mpi/cxx/topology_inln.h
===================================================================
--- ompi/mpi/cxx/topology_inln.h (revision 25570)
+++ ompi/mpi/cxx/topology_inln.h (working copy)
@@ -99,7 +99,7 @@
}
inline MPI::Cartcomm
-MPI::Cartcomm::Sub(const bool remain_dims[])
+MPI::Cartcomm::Sub(const bool remain_dims[]) const
{
int ndims;
MPI_Cartdim_get(mpi_comm, &ndims);
Index: ompi/mpi/cxx/intercomm.h
===================================================================
--- ompi/mpi/cxx/intercomm.h (revision 25570)
+++ ompi/mpi/cxx/intercomm.h (working copy)
@@ -77,7 +77,7 @@
virtual Group Get_remote_group() const;
- virtual Intracomm Merge(bool high);
+ virtual Intracomm Merge(bool high) const;
virtual Intercomm Create(const Group& group) const;
Index: ompi/mpi/cxx/mpicxx.cc
===================================================================
--- ompi/mpi/cxx/mpicxx.cc (revision 25570)
+++ ompi/mpi/cxx/mpicxx.cc (working copy)
@@ -102,11 +102,13 @@
// optional datatype (C / C++)
const Datatype UNSIGNED_LONG_LONG(MPI_UNSIGNED_LONG_LONG);
const Datatype LONG_LONG(MPI_LONG_LONG);
+const Datatype LONG_LONG_INT(MPI_LONG_LONG_INT);
// c++ types
const Datatype BOOL((MPI_Datatype)&(ompi_mpi_cxx_bool));
const Datatype COMPLEX((MPI_Datatype)&(ompi_mpi_cxx_cplex));
const Datatype DOUBLE_COMPLEX((MPI_Datatype)&(ompi_mpi_cxx_dblcplex));
+const Datatype F_DOUBLE_COMPLEX((MPI_Datatype)&(ompi_mpi_cxx_dblcplex));
const Datatype LONG_DOUBLE_COMPLEX((MPI_Datatype)&(ompi_mpi_cxx_ldblcplex));
// reserved communicators
Index: ompi/mpi/cxx/functions.h
===================================================================
--- ompi/mpi/cxx/functions.h (revision 25570)
+++ ompi/mpi/cxx/functions.h (working copy)
@@ -39,6 +39,15 @@
// Environmental Inquiry
//
+int
+Add_error_class();
+
+int
+Add_error_code(int errorclass);
+
+void
+Add_error_string(int errorcode, const char* string);
+
void
Get_processor_name(char* name, int& resultlen);
Index: ompi/mpi/cxx/constants.h
===================================================================
--- ompi/mpi/cxx/constants.h (revision 25570)
+++ ompi/mpi/cxx/constants.h (working copy)
@@ -40,20 +40,42 @@
static const int ERR_INTERN = MPI_ERR_INTERN;
static const int ERR_PENDING = MPI_ERR_PENDING;
static const int ERR_IN_STATUS = MPI_ERR_IN_STATUS;
-static const int ERR_LASTCODE = MPI_ERR_LASTCODE;
-
+static const int ERR_ACCESS = MPI_ERR_ACCESS;
+static const int ERR_AMODE = MPI_ERR_AMODE;
+static const int ERR_ASSERT = MPI_ERR_ASSERT;
+static const int ERR_BAD_FILE = MPI_ERR_BAD_FILE;
static const int ERR_BASE = MPI_ERR_BASE;
+static const int ERR_CONVERSION = MPI_ERR_CONVERSION;
+static const int ERR_DISP = MPI_ERR_DISP;
+static const int ERR_DUP_DATAREP = MPI_ERR_DUP_DATAREP;
+static const int ERR_FILE_EXISTS = MPI_ERR_FILE_EXISTS;
+static const int ERR_FILE_IN_USE = MPI_ERR_FILE_IN_USE;
+static const int ERR_FILE = MPI_ERR_FILE;
+static const int ERR_INFO_KEY = MPI_ERR_INFO_KEY;;
+static const int ERR_INFO_NOKEY = MPI_ERR_INFO_NOKEY;
static const int ERR_INFO_VALUE = MPI_ERR_INFO_VALUE;
-static const int ERR_INFO_KEY = MPI_ERR_INFO_KEY;
-static const int ERR_INFO_NOKEY = MPI_ERR_INFO_NOKEY;
+static const int ERR_INFO = MPI_ERR_INFO;
+static const int ERR_IO = MPI_ERR_IO;
static const int ERR_KEYVAL = MPI_ERR_KEYVAL;
+static const int ERR_LOCKTYPE = MPI_ERR_LOCKTYPE;
static const int ERR_NAME = MPI_ERR_NAME;
static const int ERR_NO_MEM = MPI_ERR_NO_MEM;
+static const int ERR_NOT_SAME = MPI_ERR_NOT_SAME;
+static const int ERR_NO_SPACE = MPI_ERR_NO_SPACE;
+static const int ERR_NO_SUCH_FILE = MPI_ERR_NO_SUCH_FILE;
+static const int ERR_PORT = MPI_ERR_PORT;
+static const int ERR_QUOTA = MPI_ERR_QUOTA;
+static const int ERR_READ_ONLY = MPI_ERR_READ_ONLY;
+static const int ERR_RMA_CONFLICT = MPI_ERR_RMA_CONFLICT;
+static const int ERR_RMA_SYNC = MPI_ERR_RMA_SYNC;
static const int ERR_SERVICE = MPI_ERR_SERVICE;
+static const int ERR_SIZE = MPI_ERR_SIZE;
static const int ERR_SPAWN = MPI_ERR_SPAWN;
+static const int ERR_UNSUPPORTED_DATAREP = MPI_ERR_UNSUPPORTED_DATAREP;
+static const int ERR_UNSUPPORTED_OPERATION = MPI_ERR_UNSUPPORTED_OPERATION;
static const int ERR_WIN = MPI_ERR_WIN;
+static const int ERR_LASTCODE = MPI_ERR_LASTCODE;
-
// assorted constants
OMPI_DECLSPEC extern void* const BOTTOM;
OMPI_DECLSPEC extern void* const IN_PLACE;
@@ -137,12 +159,14 @@
// optional datatype (C / C++)
OMPI_DECLSPEC extern const Datatype LONG_LONG;
+OMPI_DECLSPEC extern const Datatype LONG_LONG_INT;
OMPI_DECLSPEC extern const Datatype UNSIGNED_LONG_LONG;
// c++ types
OMPI_DECLSPEC extern const Datatype BOOL;
OMPI_DECLSPEC extern const Datatype COMPLEX;
OMPI_DECLSPEC extern const Datatype DOUBLE_COMPLEX;
+OMPI_DECLSPEC extern const Datatype F_DOUBLE_COMPLEX;
OMPI_DECLSPEC extern const Datatype LONG_DOUBLE_COMPLEX;
// special datatypes for contstruction of derived datatypes
Index: ompi/mpi/cxx/functions_inln.h
===================================================================
--- ompi/mpi/cxx/functions_inln.h (revision 25570)
+++ ompi/mpi/cxx/functions_inln.h (working copy)
@@ -53,6 +53,28 @@
// Environmental Inquiry
//
+inline int
+MPI::Add_error_class()
+{
+ int errcls;
+ (void)MPI_Add_error_class(&errcls);
+ return errcls;
+}
+
+inline int
+MPI::Add_error_code(int errorclass)
+{
+ int errcode;
+ (void)MPI_Add_error_code(errorclass, &errcode);
+ return errcode;
+}
+
+inline void
+MPI::Add_error_string(int errorcode, const char* string)
+{
+ (void)MPI_Add_error_string(errorcode, const_cast<char *>(string));
+}
+
inline void
MPI::Get_processor_name(char* name, int& resultlen)
{
Index: ompi/mpi/cxx/datatype_inln.h
===================================================================
--- ompi/mpi/cxx/datatype_inln.h (revision 25570)
+++ ompi/mpi/cxx/datatype_inln.h (working copy)
@@ -163,7 +163,30 @@
return size;
}
+inline void
+MPI::Datatype::Pack_external(const char* datarep, const void* inbuf, int
incount,
+ void* outbuf, MPI::Aint outsize, MPI::Aint& position) const
+{
+ (void)MPI_Pack_external(const_cast<char *>(datarep), const_cast<void
*>(inbuf),
+ incount, mpi_datatype, outbuf, outsize,
&position);
+}
+inline MPI::Aint
+MPI::Datatype::Pack_external_size(const char* datarep, int incount) const
+{
+ MPI_Aint addr;
+ (void)MPI_Pack_external_size(const_cast<char *>(datarep), incount,
mpi_datatype, &addr);
+ return addr;
+}
+
+inline void
+MPI::Datatype::Unpack_external(const char* datarep, const void* inbuf,
+ MPI::Aint insize, MPI::Aint& position, void* outbuf, int outcount)
const
+{
+ (void)MPI_Unpack_external(const_cast<char *>(datarep), const_cast<void
*>(inbuf),
+ insize, &position, outbuf, outcount,
mpi_datatype);
+}
+
//
// Miscellany
//
@@ -182,7 +205,54 @@
return type;
}
+inline MPI::Datatype
+MPI::Datatype::Create_darray(int size, int rank, int ndims,
+ const int array_of_gsizes[], const int array_of_distribs[],
+ const int array_of_dargs[], const int array_of_psizes[],
+ int order) const
+{
+ MPI_Datatype type;
+ (void) MPI_Type_create_darray(size, rank, ndims,
+ const_cast<int *>(array_of_gsizes),
+ const_cast<int *>(array_of_distribs),
+ const_cast<int *>(array_of_dargs),
+ const_cast<int *>(array_of_psizes),
+ order, mpi_datatype, &type);
+ return type;
+}
+inline MPI::Datatype
+MPI::Datatype::Create_f90_complex(int p, int r)
+{
+ MPI_Datatype type;
+ (void) MPI_Type_create_f90_complex(p, r, &type);
+ return type;
+}
+
+inline MPI::Datatype
+MPI::Datatype::Create_f90_integer(int r)
+{
+ MPI_Datatype type;
+ (void) MPI_Type_create_f90_integer(r, &type);
+ return type;
+}
+
+inline MPI::Datatype
+MPI::Datatype::Create_f90_real(int p, int r)
+{
+ MPI_Datatype type;
+ (void) MPI_Type_create_f90_real(p, r, &type);
+ return type;
+}
+
+inline MPI::Datatype
+MPI::Datatype::Match_size(int typeclass, int size)
+{
+ MPI_Datatype type;
+ (void) MPI_Type_match_size(typeclass, size, &type);
+ return type;
+}
+
//
// External Interfaces
//
Index: ompi/mpi/cxx/comm_inln.h
===================================================================
--- ompi/mpi/cxx/comm_inln.h (revision 25570)
+++ ompi/mpi/cxx/comm_inln.h (working copy)
@@ -543,7 +543,7 @@
}
inline void
-MPI::Comm::Set_errhandler(const MPI::Errhandler& errhandler) const
+MPI::Comm::Set_errhandler(const MPI::Errhandler& errhandler)
{
(void)MPI_Comm_set_errhandler(mpi_comm, errhandler);
}
Index: ompi/mpi/cxx/datatype.h
===================================================================
--- ompi/mpi/cxx/datatype.h (revision 25570)
+++ ompi/mpi/cxx/datatype.h (working copy)
@@ -148,6 +148,14 @@
virtual int Pack_size(int incount, const Comm& comm) const;
+ virtual void Pack_external(const char* datarep, const void* inbuf, int
incount,
+ void* outbuf, Aint outsize, Aint& position) const;
+
+ virtual Aint Pack_external_size(const char* datarep, int incount) const;
+
+ virtual void Unpack_external(const char* datarep, const void* inbuf,
+ Aint insize, Aint& position, void* outbuf, int outcount) const;
+
//
// Miscellany
//
@@ -156,6 +164,20 @@
const int array_of_starts[], int order)
const;
+ virtual Datatype Create_darray(int size, int rank, int ndims,
+ const int array_of_gsizes[], const int array_of_distribs[],
+ const int array_of_dargs[], const int array_of_psizes[],
+ int order) const;
+
+ // Language Binding
+ static Datatype Create_f90_complex(int p, int r);
+
+ static Datatype Create_f90_integer(int r);
+
+ static Datatype Create_f90_real(int p, int r);
+
+ static Datatype Match_size(int typeclass, int size);
+
//
// External Interfaces
//
Index: ompi/mpi/cxx/topology.h
===================================================================
--- ompi/mpi/cxx/topology.h (revision 25570)
+++ ompi/mpi/cxx/topology.h (working copy)
@@ -80,7 +80,7 @@
virtual void Shift(int direction, int disp,
int &rank_source, int &rank_dest) const;
- virtual Cartcomm Sub(const bool remain_dims[]);
+ virtual Cartcomm Sub(const bool remain_dims[]) const;
virtual int Map(int ndims, const int dims[], const bool periods[]) const;
Index: ompi/mpi/cxx/intercomm_inln.h
===================================================================
--- ompi/mpi/cxx/intercomm_inln.h (revision 25570)
+++ ompi/mpi/cxx/intercomm_inln.h (working copy)
@@ -51,7 +51,7 @@
}
inline MPI::Intracomm
-MPI::Intercomm::Merge(bool high)
+MPI::Intercomm::Merge(bool high) const
{
MPI_Comm newcomm;
(void)MPI_Intercomm_merge(mpi_comm, (int)high, &newcomm);