使用MPI对Julia代码进行基准测试的正确方法是什么?
我正在学习使用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)
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()
无论哪种方式,您可能正在寻找的是:它允许您使用和打印出可能与您相关的计时信息的特定部分。我建议查看上面链接中的文档,因为它具有所有相关功能