Parallel processing Julia并行宏似乎不起作用

Parallel processing Julia并行宏似乎不起作用,parallel-processing,julia,Parallel Processing,Julia,这是我第一次使用julia进行并行计算。我有点头痛。那么让我们假设我开始如下:julia-p4。然后,我为所有处理器声明a函数,然后将其与pmap以及@parallel for一起使用 @everywhere函数计数\u头(n) c::Int=0 对于i=1:n c+=兰特(布尔) 结束 n、 c#元组(输入、输出) 结束 ######第一部分###### v=pmap(计数头,50000:1000:70000) println(“结果第一部分”) println(v) ######第二部分##

这是我第一次使用julia进行并行计算。我有点头痛。那么让我们假设我开始如下:
julia-p4
。然后,我为所有处理器声明a函数,然后将其与
pmap
以及
@parallel for
一起使用

@everywhere函数计数\u头(n)
c::Int=0
对于i=1:n
c+=兰特(布尔)
结束
n、 c#元组(输入、输出)
结束
######第一部分######
v=pmap(计数头,50000:1000:70000)
println(“结果第一部分”)
println(v)
######第二部分######
println(“结果第二部分”)
@与50000:1000:70000中的i平行
println(计数头(i))
结束
结果如下

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)

你的两个例子都能在我的笔记本电脑上正常工作,所以我不确定,但我认为这个答案可能会解决你的问题

如果在

julia并行计算文档:

。。。如果不是,则可以省略还原运算符 需要。在这种情况下,循环异步执行,即生成 对所有可用工作线程执行独立任务,并返回 RemoteRef立即执行,无需等待完成。打电话的人可以 稍后通过调用fetch()等待RemoteRef完成 或者在循环结束时通过前缀等待完成 使用@sync,类似于用于的@sync@parallel


因此,在RemoteRef完成之前,您可能正在对其调用
println

另外:如果您尝试处理这些事情,则将事情分配给变量,然后检查返回的内容(或使用获取的远程ref)可能更有用,也可能是更好的做法而不是
println
,我想这更可能是您以后使用它们的原因,谢谢!我将
@parallel
替换为
@sync@parallel
。它很好用。这是一个一般性的问题。你为什么需要这个?这些文件没有意义吗?如果没有@sync,循环将立即返回一些对象(RemoteRef)(即,即使工作人员尚未完成该功能)。要在返回/打印答案之前等待它们完成,我们可以使用
fetch()
或使用@sync在循环结束时等待。