Florian Lindner
2018-03-29 07:58:54 UTC
Hello,
in a code that I am currently reading I have found that code:
template <size_t>
struct MPI_Select_unsigned_integer_datatype;
template <>
struct MPI_Select_unsigned_integer_datatype<1> {
static MPI_Datatype datatype;
};
MPI_Datatype MPI_Select_unsigned_integer_datatype<1>::datatype = MPI_UNSIGNED_CHAR;
template <>
struct MPI_Select_unsigned_integer_datatype<2> {
static MPI_Datatype datatype;
};
MPI_Datatype MPI_Select_unsigned_integer_datatype<2>::datatype = MPI_UNSIGNED_SHORT;
template <>
struct MPI_Select_unsigned_integer_datatype<4> {
static MPI_Datatype datatype;
};
MPI_Datatype MPI_Select_unsigned_integer_datatype<4>::datatype = MPI_UNSIGNED;
template <>
struct MPI_Select_unsigned_integer_datatype<8> {
static MPI_Datatype datatype;
};
MPI_Datatype MPI_Select_unsigned_integer_datatype<8>::datatype = MPI_UNSIGNED_LONG;
#define MPI_BOOL MPI_Select_unsigned_integer_datatype<sizeof(bool)>::datatype
It redefines MPI_BOOL based on the size of bool. I wonder if this is needed and why?
I was speculating that the compiler could pack multiple bools in one word, when used as a array. But the code above is a
compile time specialization and won't help there.
Best Thanks,
Florian
in a code that I am currently reading I have found that code:
template <size_t>
struct MPI_Select_unsigned_integer_datatype;
template <>
struct MPI_Select_unsigned_integer_datatype<1> {
static MPI_Datatype datatype;
};
MPI_Datatype MPI_Select_unsigned_integer_datatype<1>::datatype = MPI_UNSIGNED_CHAR;
template <>
struct MPI_Select_unsigned_integer_datatype<2> {
static MPI_Datatype datatype;
};
MPI_Datatype MPI_Select_unsigned_integer_datatype<2>::datatype = MPI_UNSIGNED_SHORT;
template <>
struct MPI_Select_unsigned_integer_datatype<4> {
static MPI_Datatype datatype;
};
MPI_Datatype MPI_Select_unsigned_integer_datatype<4>::datatype = MPI_UNSIGNED;
template <>
struct MPI_Select_unsigned_integer_datatype<8> {
static MPI_Datatype datatype;
};
MPI_Datatype MPI_Select_unsigned_integer_datatype<8>::datatype = MPI_UNSIGNED_LONG;
#define MPI_BOOL MPI_Select_unsigned_integer_datatype<sizeof(bool)>::datatype
It redefines MPI_BOOL based on the size of bool. I wonder if this is needed and why?
I was speculating that the compiler could pack multiple bools in one word, when used as a array. But the code above is a
compile time specialization and won't help there.
Best Thanks,
Florian