【发布时间】:2014-10-02 20:46:50
【问题描述】:
我正在尝试在 Julia 中使用并行性来构建几种大型类型(特别是通过 sklearn 到 PyCall 的高斯混合模型)。
如果我连续这样做,我会这样做:
models = Array(GMM, N)
for i = 1 : N
params = ...
models[i] = train_gmm(params)
end
但是,我应该能够做到这一点是并行的。我不知道从哪里开始,因为 SharedArrays 和 @parallel 对我来说似乎不是正确的选择。
我尝试使用@spawn,但发现以下内容:
function f1()
rand(10000000)
rand(10000000)
rand(10000000)
rand(10000000)
rand(10000000)
end
function f2()
a = @spawn rand(10000000)
b = @spawn rand(10000000)
c = @spawn rand(10000000)
d = @spawn rand(10000000)
e = @spawn rand(10000000)
a_r = fetch(a)
b_r = fetch(b)
c_r = fetch(c)
d_r = fetch(d)
e_r = fetch(e)
end
f1()
f2()
println(@elapsed(f1()))
println(@elapsed(f2()))
f1 需要 0.21 秒,f2 需要 0.32 秒! @spawn 有什么我想念的吗?
编辑
看起来像在做:
function f1()
[sum(rand(100000000)),
sum(rand(100000000)),
sum(rand(100000000)),
sum(rand(100000000)),
sum(rand(100000000))]
end
function f2()
a = @spawn sum(rand(100000000))
b = @spawn sum(rand(100000000))
c = @spawn sum(rand(100000000))
d = @spawn sum(rand(100000000))
e = @spawn sum(rand(100000000))
[fetch(a), fetch(b), fetch(c), fetch(d), fetch(e)]
end
导致 f2() 比 f1() 运行得更快,并且更符合我的要求。除非有人有更好的官方方式,否则我会这样做。
谢谢。
【问题讨论】:
标签: julia