Hi,

I just compiled my library with version 1.0 of OpenMPI and I had two problems.

First the MPI_Offset datatype is defined as a preprocessor macro as follow in 
mpi.h:

   /* Type of MPI_Offset */
   #define MPI_Offset long long

This generate a syntax error when MPI_Offset is used in C++ for what Stroustrup 
call a value construction (e.g. type ( expr_list ) c.f. section 6.2 in The C++ 
programming language).

For example the following code:

   MPI_Offset   ofs,size;
   int          nbr;

   // compute ofs, size and nbr.

   ofs +=  MPI_Offset(nbr)*size;

cannot compile if MPI_Offset is defined as it is currently.

The obvious solution is to define MPI_Offset as a typedef as follow:

   /* Type of MPI_Offset */
   typedef long long MPI_Offset;

Note that a similar typedef is used for MPI_Aint:

   typedef long MPI_Aint;


The seccond problem is related to the C++ interface: it uses direct C-style 
type cast that remove constness. Since ISO/C++ have the const_cast operator 
especially for this situation, the compiler generates TONS of warnings (I use 
to compile my code with -Wall and many other warning activated) and this is 
really annoying.

The solution to this problem is to replace C-style cast with const_cast 
operator. For example the MPI::Comm::Send method defined in 
openmpi/ompi/mpi/cxx/comm_inln.h as follow:

   inline void
   MPI::Comm::Send(const void *buf, int count, 
                   const MPI::Datatype & datatype, int dest, int tag) const
   {
     (void)MPI_Send((void *)buf, count, datatype, dest, tag, mpi_comm);
   }

becomes:

   inline void
   MPI::Comm::Send(const void *buf, int count, 
                   const MPI::Datatype & datatype, int dest, int tag) const
   {
     (void)MPI_Send(const_cast<void *>(buf), count, datatype, dest, tag, 
mpi_comm);
   }

This fix the annoying warning problem because the const_cast operator is the 
intended method to remove constness.



Martin Audet                   E: matin.au...@imi.cnrc-nrc.gc.ca
Research Officer               T: 450-641-5034
Industrial Material Institute
National Research Council of Canada
75 de Mortagne, Boucherville, QC, J4B 6Y4

Reply via email to