2016-08-19 29 views
2

我正在使用cray-mpich/7.4.0。当我做Cray mpich是否有64位整数MPI变量?

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

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

我已经另一个群集与了openmpi/1.10.2尝试这样做,一个打印8.

回答

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 
3

MPI_UINT64_TMPI_Datatype类型。未指定MPI_Datatype的确切实施。对于基于MPICH的MPI实现(例如Cray's),通常是int,而在OpenMPI中则是指向结构的指针。

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

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

+0

这是正确的。您可以在与您的实现相关的mpi.h文件中看到MPI_UINT64_T的值。 – kraffenetti