2016-08-19 3 views

ответ

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_T имеет тип MPI_Datatype. Точная реализация MPI_Datatype не указана. Для MPI на основе MPI-реализации (например, Cray's) это s обычно int, тогда как в OpenMPI это указатель на структуру.

В любом случае ваш printf печатает sizeof(MPI_Datatype), который не имеет отношения к фактическому байтузу того типа, который он обозначает.

Если вы хотите проверить, имеет ли размер указателя (адреса) в вашей системе 32 или 64 бит, вы можете напечатать sizeof(void*) или любой другой тип указателя.

+0

Это правильно. Вы можете увидеть значение 'MPI_UINT64_T' в файле' mpi.h', связанном с вашей реализацией. – kraffenetti