朱莉娅:等待时间超过@time

时间:2019-08-13 04:33:04

标签: julia

我正在尝试同时做一些事情。基于@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所说的要长得多。

1 个答案:

答案 0 :(得分:1)

您应该阅读@distributed的文档(在提示符下键入?@distributed

  

请注意,没有减速器功能,@distributed将执行   异步,即它在所有可用资源上产生独立的任务   工人并立即返回,而无需等待完成。至   等待完成,在呼叫前加上@sync,例如:

@sync @distributed for var = range
      body
end

当前,您只是在开始计算并开始求助,因此您获得了开始的时间,而不必等待其完成

还有两件事:

  • 请始终提供一个“最小工作示例”,以便其他张贴者可以复制粘贴您的代码,然后它就会运行。因此,请包括using Distributed和其他必需的软件包。定义所有变量,等等。EV0是什么,Random在这里是什么意思?等。
  • 您正在定义r,但没有使用它。有什么用?
  • max是Base中函数的名称,像这样重载该名称可能不是一个好主意。