我正在为mpi编写一个type_traits库,但是当我将float int
定义为MPI_FLOAT_INT
的类型时,我在声明错误中得到两个或更多变量类型,{{1}的等价类型是什么1}}在c ++中?
答案 0 :(得分:2)
MPI_FLOAT_INT
这是一对32位浮点数后跟一个32位整数。
等效值为true
或std::pair<float, int>
。
您可以尝试使用struct float_int{ float f; int i;};
代替int32_t
和int
,以尝试获得正确的尺寸。
答案 1 :(得分:2)
唯一的权威来源MPI standard将MPI_FLOAT_INT
定义为(第5.9.4节 MINLOC
和MAXLOC
):
数据类型
MPI_FLOAT_INT
,就好像由以下指令序列定义。
type[0] = MPI_FLOAT
type[1] = MPI_INT
disp[0] = 0
disp[1] = sizeof(float)
block[0] = 1
block[1] = 1
MPI_TYPE_CREATE_STRUCT(2, block, disp, type, MPI_FLOAT_INT)
类似的陈述适用于
MPI_LONG_INT
和MPI_DOUBLE_INT
。
这意味着该类型对应struct { float a; int b; }
,但前提是保证在a
和b
之间不插入填充空格。在int
为64位且必须在8个字节上对齐的系统上可能不是这种情况。可能需要指示编译器生成压缩结构,例如与海湾合作委员会:
#pragma pack(push, 1)
struct float_int
{
float a;
int b;
}
#pragma pack(pop)
请注意,MPI_FLOAT_INT
旨在用于MINLOC
和MAXLOC
缩减,以便找出最小/最大float
值和最低编号等级抱着它。
答案 2 :(得分:0)
根据Linux man page,MPI_FLOAT_INT
是一个定义为:
struct { float, int }