使用MPI对Julia代码进行基准测试的正确方法是什么?

使用MPI对Julia代码进行基准测试的正确方法是什么?,julia,mpi,benchmarking,Julia,Mpi,Benchmarking,我正在学习使用MPI编写Julia代码,我想对基本的发送/接收示例进行基准测试。我对示例代码做了一点修改,以包括计时 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)

我正在学习使用MPI编写Julia代码,我想对基本的发送/接收示例进行基准测试。我对示例代码做了一点修改,以包括计时

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:发送0->1=Int8[0,0,0,0]
1:发送1->0=Int8[1,1,1,1]
0:接收到1->0=Int8[1,1,1,1]
1:接收到0->1=Int8[0,0,0,0]
0.077899秒0.077898秒(3.37 k分配:187.234 KiB)(3.37 k分配:187.234 KiB)

如何解决此格式问题?我还想对几个消息大小重复这个过程,但我不知道如何处理
@time
给出的输出。有人能给我指出正确的方向吗?

我的第一个建议是看看这里:看看更多的基准测试例程。使用
@time
通常不是一种可靠的基准测试方法,除非您试图从非常高的层次了解性能

看起来,输出中的单行格式是您构建和随后运行代码的方式的结果。 尝试在不使用这两个进程的情况下运行它,或者在
@时间之后添加
println()


无论哪种方式,您可能正在寻找的是:它允许您使用和打印出可能与您相关的计时信息的特定部分。我建议查看上面链接中的文档,因为它具有所有相关功能。

我的第一个建议是看一下这里:看一些更多的基准测试例程。使用
@time
通常不是一种可靠的基准测试方法,除非您试图从非常高的层次了解性能

看起来,输出中的单行格式是您构建和随后运行代码的方式的结果。 尝试在不使用这两个进程的情况下运行它,或者在
@时间之后添加
println()

无论哪种方式,您可能正在寻找的是:它允许您使用和打印出可能与您相关的计时信息的特定部分。我建议查看上面链接中的文档,因为它具有所有相关功能