集群中allreduce的MPI_BYTE错误

时间:2018-03-22 22:52:27

标签: parallel-processing mpi cluster-computing

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();
}

1 个答案:

答案 0 :(得分:2)

我认为标准不允许您将MPI_BYTEC bool一起使用。

FWIW,Fortran您可以使用MPI_LOGICAL

您的陈述sizeof(bool) == 1确实不正确,请参阅Is sizeof(bool) defined?了解详情。

从我的角度来看,你的程序是不正确的,因此有一个未定义的行为。

我担心您必须在bool中手动将byte转换为C,然后才能使用MPI_BYTE