我正在使用cray-mpich/7.4.0。當我做Cray mpich是否有64位整數MPI變量?
printf("Size:%d",sizeof(MPI_UINT64_T));
它打印4而不是8.爲什麼?羣集機器肯定是64位。
我已經另一個羣集與了openmpi/1.10.2嘗試這樣做,一個打印8.
我正在使用cray-mpich/7.4.0。當我做Cray mpich是否有64位整數MPI變量?
printf("Size:%d",sizeof(MPI_UINT64_T));
它打印4而不是8.爲什麼?羣集機器肯定是64位。
我已經另一個羣集與了openmpi/1.10.2嘗試這樣做,一個打印8.
以前的回答是對的。但你真的應該使用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
MPI_UINT64_T
是MPI_Datatype
類型。未指定MPI_Datatype
的確切實施。對於基於MPICH的MPI實現(例如Cray's),通常是int
,而在OpenMPI中則是指向結構的指針。
在任何情況下,您的printf將打印sizeof(MPI_Datatype)
,它與它所代表的類型的實際字節大小無關。
如果要檢查系統中的指針(地址)大小是32位還是64位,則可以打印sizeof(void*)
或任何其他指針類型。
這是正確的。您可以在與您的實現相關的mpi.h文件中看到MPI_UINT64_T的值。 – kraffenetti