[mpich-discuss] MPI_C_BOOL and bool

Dave Goodell goodell at mcs.anl.gov
Fri Apr 8 13:01:00 CDT 2011


You are misunderstanding the usage of "sizeof" and what MPI datatype handles are.  "MPI_C_BOOL" is a constant of type "MPI_Datatype", which is a typedef for "int" (4 bytes on most platforms).  However the type that "MPI_C_BOOL" is describing is C's "_Bool" type (available as "bool" when "stdbool.h" is included), which is typically 1 byte large.

In order to check the size of the data described by an MPI datatype, you should use the "MPI_Type_size" routine.

Also, the blog entry that you pointed out refers to the size in the "external32" representation rather than some sort of hard-coded size for the type in general.  Virtually nobody on Earth actually is affected by that last minute change, so I wouldn't worry about it.

-Dave

On Apr 8, 2011, at 11:40 AM CDT, Torquil Macdonald Sørensen wrote:

> Hi all!
> 
> In my MPICH2 program, sizeof(MPI_C_BOOL) returns 4.
> 
> On the other hand, sizeof(bool) returns 1.
> 
> Does that mean that the following might result in a segfault?:
> 
> bool buf = false;
> MPI_Bcast(&buf, 1, MPI_C_BOOL, 0, MPI_COMM_WORLD);
> 
> After all, MPICH then writes a 4 byte amount of data to the buffer, for which 
> only 1 byte is allocated. I'm using MPICH2 1.4rc1 at the moment.
> 
> I came over this message regarding the MPI2.2 standard:
> 
> http://www.unixer.de/blog/index.php/2009/07/30/the-mpi-standard-mpi-22-is-
> fixed-now/
> 
> where it seems to be explained that MPI_C_BOOL is 4 bytes due to some kind of 
> oversight, and that it will be changed in an errata to the MPI2.2 standard.
> 
> In conclusion, does all this mean that I cannot use 'bool' and MPI_C_BOOL 
> together until sometime in the future?
> 
> Thanks!
> Torquil Sørensen
> _______________________________________________
> mpich-discuss mailing list
> mpich-discuss at mcs.anl.gov
> https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss



More information about the mpich-discuss mailing list