mpi4py中的哪些操作是“同步”操作

2024-06-12 00:50:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用mpi4py编写python代码,从中导入MPI。然后,我设置了全球通讯器MPI.COMM_世界并存储在变量comm中

我用n>;1个线程运行这段代码,在某个时刻,它们都会进入for循环(所有核心都要经历相同数量的迭代)。在

在for循环中我有一个“通信减少(…)“呼叫。 这似乎适用于少数核心,但随着问题规模的增加(比如64核),我发现我的程序“挂起”。在

所以我想知道这是否与reduce(…)调用有关。我知道这个调用需要所有线程(也就是说,我们总共运行2个线程)。如果一个线程进入循环,而另一个线程由于任何原因没有进入循环,程序将挂起,因为reduce(…)调用等待两个线程)。在

我的问题是: reduce调用是一个“同步”任务,即它的工作方式是否与通信屏障()“打电话? 如果可能的话,更一般地说,同步任务是什么(如果除了屏障之外还有其他任务)?在


Tags: 代码gt程序reduce核心for世界mpi4py
1条回答
网友
1楼 · 发布于 2024-06-12 00:50:55

是的,标准MPI reduce调用正在阻塞(所有线程必须先与root通信,然后才能继续任何线程)。其他阻塞调用包括Allgather、Allreduce、AlltoAll、Barrier、Bsend、Gather、Recv、Reduce、Scatter等

其中许多都有非阻塞等价物,您会发现前面有一个I(例如Isend),但它们并不是在mpi4py中全面实现的。在

{更多信息请参见^ a1。在

不确定你的宿醉。在4核桌面上运行64线程作业可能会引起处理器拥挤。在

相关问题 更多 >