3

我正在使用 cray-mpich/7.4.0。当我做

 printf("Size:%d",sizeof(MPI_UINT64_T));

它打印 4 而不是 8。这是为什么呢?集群机器肯定是 64 位的。

我已经在另一个集群上使用 openmpi/1.10.2 进行了尝试,并打印了 8。

4

2 回答 2

3

MPI_UINT64_T是类型MPI_DatatypeMPI_Datatype没有指定的确切实现。对于基于 MPICH 的 MPI 实现(例如 Cray 的),s 通常是一个int,而在​​ OpenMPI 中它是一个指向结构的指针。

在任何情况下,您的 printf 都会打印sizeof(MPI_Datatype),它与它所代表的类型的实际字节大小无关。

如果要检查系统中的指针(地址)大小是 32 位还是 64 位,可以打印sizeof(void*)或任何其他指针类型。

于 2016-08-20T09:59:52.800 回答
2

前面的答案是对的。但你真的应该使用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
于 2016-08-20T22:49:11.107 回答