等待集体通信时PC内核是否暂停?

问题描述

我需要知道使用集体通信bcast而不从根进程发送消息时,系统核心将会发生什么。要提供更多详细信息:
我已经用2个机器人对系统进行了编程(模拟)。每个机器人都是一个MPI进程。由于机器人需要多次计算耗时的函数,因此我决定使用更多的MPI流程。 每个机器人都被视为一个主进程,并被分配了一些从属进程(例如15个从属)。 从站的代码是如此简单;每个从站都有一个while循环,该循环始终存在(而True循环):

def run_slave(communicator,offset):
    while True:
        data = np.empty(2,dtype=int)
        data = communicator.bcast(data,root=0)
        s = data[0]
        a = data[1]
        if s == -1:   # means termination
            break
        else:
            my_array = compute_heavy_function(s,a)
            receive_buf = None
            communicator.Gatherv(sendbuf=my_array,recvbuf=(receive_buf,offset),root=0)

在主要功能中,MPI.COMM_WORLD通信器是拆分的,因此每个机器人及其从属都有自己的通信器,并且每个机器人都是集体通信的基础。 我的整个代码是如此之大。以下是我的主代码的一部分:

    def get_output_with_slaves(s,a,communicator,offset,array_size):
        data = [s,a]
        data = communicator.bcast(data,root=0)

        prob_array = np.empty(array_size,dtype=float)
        send_buf = np.zeros(1)
        communicator.Gatherv(sendbuf=send_buf,recvbuf=(prob_array,root=0)

        return prob_array

我不确定此设计是否正确。我通过使用从属设备加快了速度,但是我不知道为什么在我的Linux的系统监视器中,所有内核(80个线程)都可以达到99%或100%的运行速度。我怀疑在奴隶的代码中使用True时是正确的决定,但我不知道其他解决方案。没有从根进程发送的繁忙的等待循环或bcast命令会使内核处于挂起状态吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)