Pet*_*r B 5 parallel-processing julia
我的机器有4个核心.当我使用@sync @parallel进行并行运行时,我注意到Julia在将作业发送到4个处理器之前将作业分成4 个:
# start of do_something.jl
function do_something(i, parts)
procs = zeros(Int, parts)
procs[i] = myid()
total = 0.0
for j = 1:i * 100000000
total = total + 1e-6
end
return procs
end
# end of do_something.jl
# synctest3a.jl
addprocs(Sys.CPU_CORES)
@everywhere include("do_something.jl")
parts = 20
procs = @sync @parallel (+) for i = 1:parts
do_something(i, parts)
end
@printf("procs=%s\n", procs)
Run Code Online (Sandbox Code Playgroud)
julia synctest3a.jl的结果,表示前5个被发送到处理器2,接下来的5个被发送到处理器3,依此类推:
procs=[2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5]
Run Code Online (Sandbox Code Playgroud)
我有一个应用程序,执行do_something()的时间可能会有很大变化(在这个玩具示例中,它或多或少与i成比例).所以我真正想要的是每个处理器尽快执行do_something,而不是每个处理器总是执行1/4的调用.我怎么做?
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |