Cray mpich 是否有 64 位整数 MPI 变量?
Does Cray mpich have a 64 bit integer MPI variable?
我正在使用 cray-mpich/7.4.0。当我这样做时
printf("Size:%d",sizeof(MPI_UINT64_T));
它打印出 4 而不是 8。这是为什么?集群机器肯定是 64 位的。
我已经在另一个集群上用 openmpi/1.10.2 尝试过这个,结果打印出 8。
MPI_UINT64_T
是 MPI_Datatype
类型。未指定 MPI_Datatype
的确切实现。对于基于 MPICH 的 MPI 实现(例如 Cray 的),s 通常是 int
,而在 OpenMPI 中它是指向结构的指针。
在任何情况下,您的 printf 都会打印 sizeof(MPI_Datatype)
,这与它所代表的类型的实际字节大小无关。
如果要检查系统中的指针(地址)大小是 32 位还是 64 位,可以打印 sizeof(void*)
或任何其他指针类型。
之前的回答是正确的。但你真的应该使用 MPI_Type_size
.
MPI_Type_size(MPI_UINT64_T,&tsize);
fprintf(stderr,"Size:%d, MPI_Type_size:%d\n",sizeof(MPI_UINT64_T),tsize);
它显示了 MPI_Datatype
的大小与您真正想知道的 UINT64
类型的大小之间的差异。
Size:4, MPI_Type_size:8
我正在使用 cray-mpich/7.4.0。当我这样做时
printf("Size:%d",sizeof(MPI_UINT64_T));
它打印出 4 而不是 8。这是为什么?集群机器肯定是 64 位的。
我已经在另一个集群上用 openmpi/1.10.2 尝试过这个,结果打印出 8。
MPI_UINT64_T
是 MPI_Datatype
类型。未指定 MPI_Datatype
的确切实现。对于基于 MPICH 的 MPI 实现(例如 Cray 的),s 通常是 int
,而在 OpenMPI 中它是指向结构的指针。
在任何情况下,您的 printf 都会打印 sizeof(MPI_Datatype)
,这与它所代表的类型的实际字节大小无关。
如果要检查系统中的指针(地址)大小是 32 位还是 64 位,可以打印 sizeof(void*)
或任何其他指针类型。
之前的回答是正确的。但你真的应该使用 MPI_Type_size
.
MPI_Type_size(MPI_UINT64_T,&tsize);
fprintf(stderr,"Size:%d, MPI_Type_size:%d\n",sizeof(MPI_UINT64_T),tsize);
它显示了 MPI_Datatype
的大小与您真正想知道的 UINT64
类型的大小之间的差异。
Size:4, MPI_Type_size:8