sil*_*gon 3 parallel-processing julia
我是第一次使用并行计算julia.我有点头疼.所以让我说我开始julia如下:julia -p 4.然后我为所有处理器声明了一个函数,然后我pmap和它一起使用它@parallel for.
@everywhere function count_heads(n)
c::Int = 0
for i=1:n
c += rand(Bool)
end
n, c # tuple (input, output)
end
###### first part ######
v=pmap(count_heads, 50000:1000:70000)
println("Result first part")
println(v)
###### second part ######
println("Result second part")
@parallel for i in 50000:1000:70000
println(count_heads(i))
end
Run Code Online (Sandbox Code Playgroud)
结果如下.
Result first part
Counting heads function
Any[(50000,24894),(51000,25559),(52000,26141),(53000,26546),(54000,27056),(55000,27426),(56000,28024),(57000,28380),(58000,29001),(59000,29398),(60000,30100),(61000,30608),(62000,31001),(63000,31520),(64000,32200),(65000,32357),(66000,33063),(67000,33674),(68000,34085),(69000,34627),(70000,34902)]
Result second part
From worker 4: (61000, From worker 5: (66000, From worker 2: (50000, From worker 3: (56000
Run Code Online (Sandbox Code Playgroud)
因此,功能pmap显然工作正常,但@parallel for正在停止或它没有给我结果.难道我做错了什么?
谢谢!
更新
如果在我放的代码的最后sleep(10).它正确地工作.
From worker 5: (66000,33182)
From worker 3: (56000,27955)
............
From worker 3: (56000,27955)
Run Code Online (Sandbox Code Playgroud)
你的两个例子都可以在我的笔记本电脑上正常工作,所以我不确定,但我认为这个答案可以解决你的问题!
如果你在@sync之前添加,它应该按预期工作@parallel for
来自julia Parallel Computing Docs http://docs.julialang.org/en/release-0.4/manual/parallel-computing/:
...如果不需要,可以省略减少运算符.在这种情况下,循环以异步方式执行,即它在所有可用的worker上生成独立的任务,并立即返回RemoteRef数组而不等待完成.调用者可以稍后通过调用它们上的fetch()来等待RemoteRef完成,或者在循环结束时等待完成,前缀为@sync,如@sync @parallel for.
所以你可能println在完成之前调用RemoteRef.
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |