我正在尝试同时做一些事情。基于@time,性能非常好,但是实际上我在电脑前等待了很长时间。 代码如下。
function max(n)
rand_n = SharedArray{Float64}(n, n)
@distributed for i in 1:n
@distributed for j in 1:n
r = Random(Uniform(), 100)
rand_n[i,j] = StatsBase.maximum(EV0)
end
end
rand_n
end
@time max(1000)
0.000166秒(118个分配:18.203 KiB)
tick()
max(1000)
tock()
2.865833086s:2秒865毫秒
因此,计算机上实际经过的时间比@time所说的要长得多。
答案 0 :(得分:1)
您应该阅读@distributed
的文档(在提示符下键入?@distributed
)
请注意,没有减速器功能,
@distributed
将执行 异步,即它在所有可用资源上产生独立的任务 工人并立即返回,而无需等待完成。至 等待完成,在呼叫前加上@sync
,例如:@sync @distributed for var = range body end
当前,您只是在开始计算并开始求助,因此您获得了开始的时间,而不必等待其完成 。
还有两件事:
using Distributed
和其他必需的软件包。定义所有变量,等等。EV0
是什么,Random
在这里是什么意思?等。r
,但没有使用它。有什么用?max
是Base中函数的名称,像这样重载该名称可能不是一个好主意。