2016-05-14 49 views
3

我在Julia測試了並行性,看看我的機器上是否有加速(我選擇一種語言來實現新算法)。我不想奉獻了大量的時間書寫一個巨大的例子,所以我做了發佈版本0.4.5朱莉婭(Mac OS X和雙核),下面的測試:pmap玩具示例緩慢

$ julia -p2 

julia> @everywhere f(x) = x^2 + 10 
julia> @time map(f, 1:10000000) 
julia> @time pmap(f, 1:10000000) 

pmap比地圖顯著慢(> 20x),並且分配的內存超過10倍。我究竟做錯了什麼?

謝謝。

回答

8

這是因爲pmap旨在爲每個核心執行大量計算,而不是很多簡單的計算。如果你使用簡單的功能作爲你的功能,沿着proccesors的信息移動的開銷就會大於好處。相反,測試該代碼(我用的酷睿i7四個核心運行它):

function fast(x::Float64) 
    return x^2+1.0 
end 

function slow(x::Float64) 
    a = 1.0 
    for i in 1:1000 
     for j in 1:5000 
      a+=asinh(i+j) 
     end 
    end 
    return a 
end 

info("Precompilation") 
map(fast,linspace(1,1000,1000)) 
pmap(fast,linspace(1,1000,1000)) 
map(slow,linspace(1,1000,10)) 
pmap(slow,linspace(1,1000,10)) 

info("Testing slow function") 
@time map(slow,linspace(1,1000,10)) #3.69 s 
@time pmap(slow,linspace(1,1000,10)) #0.003 s 
info("Testing fast function") 
@time map(fast,linspace(1,1000,1000)) #52 μs 
@time pmap(fast,linspace(1,1000,1000)) #775 s 

對於很多非常小的迭代的並行化,你可以在文檔中使用@parallel,尋找它。