我第一次使用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
结果如下。
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
因此,功能pmap
显然工作正常,但@parallel for
正在停止,或者它没有给我结果。我做错了吗?
谢谢!
更新
如果在代码的末尾我放了sleep(10)
。它可以正常工作。
From worker 5: (66000,33182)
From worker 3: (56000,27955)
............
From worker 3: (56000,27955)
答案 0 :(得分:5)
您的两个示例都可以在我的笔记本电脑上正常运行,所以我不确定,但我认为这个答案可以解决您的问题!
如果您在var questions = [{
name: 'firstName',
message: 'What is your first name?',
response: 'string'
}, {
name: 'birthdate',
message: 'What is your birthdate ?',
response: 'string'
}, {
name: 'favoriteMovies',
message: 'What are your favorite movies ?',
response: 'array'
}]
@sync
,它应该按预期工作
来自julia Parallel Computing Docs http://docs.julialang.org/en/release-0.4/manual/parallel-computing/:
...如果不是,则可以省略减少运算符 需要。在这种情况下,循环异步执行,即它产生 所有可用工作者的独立任务并返回一个数组 RemoteRef立即无需等待完成。来电者可以 稍后通过调用fetch()等待RemoteRef完成 在它们上面,或者在循环结束时等待它前缀完成 使用@sync,例如@sync @parallel for。
所以你可能在RemoteRef完成之前调用@parallel for
。