【发布时间】:2020-11-28 22:38:55
【问题描述】:
我正在学习使用 MPI 编写 Julia 代码,我想对 this 基本发送/接收示例进行基准测试。我对示例代码稍作修改以包含时间。
using MPI
function executeSendReceive(n)
comm = MPI.COMM_WORLD
rank = MPI.Comm_rank(comm)
size = MPI.Comm_size(comm)
dst = mod(rank+1, size)
src = mod(rank-1, size)
N = 2^n
send_mesg = Array{Int8}(undef, N)
recv_mesg = Array{Int8}(undef, N)
fill!(send_mesg, Int8(rank))
rreq = MPI.Irecv!(recv_mesg, src, src+32, comm)
print("$rank: Sending $rank -> $dst = $send_mesg\n")
sreq = MPI.Isend(send_mesg, dst, rank+32, comm)
stats = MPI.Waitall!([rreq, sreq])
print("$rank: Received $src -> $rank = $recv_mesg\n")
MPI.Barrier(comm)
end
MPI.Init()
@time executeSendReceive(2)
MPI.Finalize()
但是,当我使用 2 个进程在终端中运行脚本时,我得到一些看起来很乱的输出。
0: Sending 0 -> 1 = Int8[0, 0, 0, 0]
1: Sending 1 -> 0 = Int8[1, 1, 1, 1]
0: Received 1 -> 0 = Int8[1, 1, 1, 1]
1: Received 0 -> 1 = Int8[0, 0, 0, 0]
0.077899 seconds0.077898 seconds (3.37 k allocations: 187.234 KiB) (3.37 k allocations: 187.234 KiB)
如何解决此格式问题?我还想对几个消息大小重复该过程,但我不知道如何操作@time 给出的输出。有人能指出我正确的方向吗?
【问题讨论】:
标签: julia mpi benchmarking