并行队列系统,是否有一个非阻塞等价于聚集?mpi4py公司

2024-09-24 02:22:09 发布

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

我想在参数列表上创建一个循环(比如50)。 循环应该由几个处理器(比如4个)并行共享。 我希望每个处理器从列表中选择下一个参数 并用这个参数调用一个函数。 功能评估预计需要不相等的时间。 以下是我希望如何安排工作的草图:

pr0 ===job0=== | ========job5======= | 
pr1 =====job1======= | ==job7== |
pr2 ===job2=== | ===job6=== | 
pr3 =job3= | =========job4======== | 

我希望每个进程都知道当前正在运行的作业的id,这样它就可以选择列表中的下一个元素并开始使用它。到目前为止,我尝试的是使用comm.allgather()

^{pr2}$

然而,这会造成一个障碍,进程在这里等待彼此完成各自的任务。当然是这个 完全没有效率,最好从一开始就在处理器之间分割阵列。我的工作是这样运行的:

pr0 ===job0===       | ========job4=======   | 
pr1 =====job1======= | ==job5==              |
pr2 ===job2===       | ===job6===            | 
pr3 =job3=           | =========job7======== | 

换句话说,我希望一个进程能够随时从所有其他进程访问counter变量。我是否可以在进程启动作业之前对其进行非阻塞发送,并使它们的counter可用于其他进程。也许共享这个变量的内存是另一种方法。在

有没有一种方法可以做到这一点而不需要专门的过程来进行计数?在


Tags: 列表参数进程处理器pr2pr1job1pr3