Julia Parallel宏似乎不起作用

时间:2016-09-21 15:10:54

标签: 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

结果如下。

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)

1 个答案:

答案 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