MPI_BYTE在一个群集上运行完美但在另一个群集上抛出错误。 有没有任何理由,因为sizeof(bool)= 1 BYTE,我喜欢1 BYTE减少。 这是代码
int main( int argcs, char *pArgs[] )
{
MPI_Init( &argcs, &pArgs );
int my_rank, comsize;
MPI_Comm_rank( MPI_COMM_WORLD, &my_rank );
MPI_Comm_size( MPI_COMM_WORLD, &comsize );
bool sb=false;
if(my_rank==comsize-1)
{
sb=true;
}
bool rb=true;
MPI_Request request0;
double t1;
t1 = MPI_Wtime();
MPI_Iallreduce( &sb, &rb, sizeof(bool), MPI_BYTE, MPI_MAX, MPI_COMM_WORLD, &request0 );
MPI_Wait( &request0, MPI_STATUS_IGNORE );
double t2 = MPI_Wtime();
MPI_Finalize();
}
答案 0 :(得分:2)
我认为标准不允许您将MPI_BYTE
与C
bool
一起使用。
FWIW,Fortran
您可以使用MPI_LOGICAL
。
您的陈述sizeof(bool) == 1
确实不正确,请参阅Is sizeof(bool) defined?了解详情。
从我的角度来看,你的程序是不正确的,因此有一个未定义的行为。
我担心您必须在bool
中手动将byte
转换为C
,然后才能使用MPI_BYTE
。