集群上 allreduce 中的 MPI_BYTE 错误
Posted
技术标签:
【中文标题】集群上 allreduce 中的 MPI_BYTE 错误【英文标题】:MPI_BYTE error in allreduce on cluster 【发布时间】:2018-09-01 13:02:04 【问题描述】: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】:我认为标准不允许您使用 MPI_BYTE
和 C
bool
。
FWIW,在Fortran
你可以使用MPI_LOGICAL
。
您sizeof(bool) == 1
的说法确实有误,详情请参考Is sizeof(bool) defined?。
在我看来,您的程序不正确,因此具有未定义的行为。
恐怕你得手动把C
中的bool
转换成byte
,然后才能用MPI_BYTE
。
【讨论】:
以上是关于集群上 allreduce 中的 MPI_BYTE 错误的主要内容,如果未能解决你的问题,请参考以下文章
带你认识大模型训练关键算法:分布式训练Allreduce算法
带你认识大模型训练关键算法:分布式训练Allreduce算法
MPI通信的几种模式, Broadcast, Scatter, Gather, Allgather, Reduce, AllReduce