У моей машины 4 ядра.Когда я выполняю параллельные запуски с @sync @parallel, я замечаю, что Джулия делит задания на 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)
Результат 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]
У меня есть приложение, в котором время выполнения do_something () может сильно различаться (в этом игрушечном примере это более или менее пропорционально i).Так что я действительно хочу, чтобы каждый процессор выполнял do_something, как только он стал бесплатным, а не каждый, выполняющий ровно 1/4 вызовов.Как мне это сделать?