Julia + MPI:一次一个处理器运行一个函数(例如 println),一个接一个

问题描述 投票:0回答:0

这是我创建的一个函数,目的是在所有处理器上逐个运行带有参数

func
的函数
inputs
。 这主要是针对
println
的订单,但不限于。

编辑:我忘记包含下一个/上一个处理器调用,所以我现在将其嵌入。

function MPI_OneByOne(::Val{my_ID},::Val{Total_Proc},func::Function,inputs...) where {my_ID,Total_Proc}

    if !Base.isequal(my_ID,zero(my_ID))
        # Wait for previous processor to finish
        MPI.recv(comm; source=mod( MPI.Comm_rank(comm)-1, MPI.Comm_size(comm)))
    end

    println(my_ID," ======================================")
    func(inputs...)

    if !Base.isequal(my_ID,Total_Proc-one(Total_Proc))
        # All but last processor need to push the next one to act
        MPI.send(nothing, comm; dest= mod(MPI.Comm_rank(comm)+1, MPI.Comm_size(comm)))
    end

    MPI.Barrier(comm)

end

这个想法是从第一个过程开始,而其他过程则等待接收。 第一个完成,触发发送到#2。 #2 做这件事,通过发送触发#3,等等。

正如您所料,这并没有按预期工作,并且函数的输出(特别是当使用一些比单个值更长的输入时)不受控制或不受顺序控制。 我做错了什么?

julia mpi
© www.soinside.com 2019 - 2024. All rights reserved.