Если вы хотите использовать процессы для распараллеливания, вы можете использовать цикл «распределенный для»:
8.2.3. Агрегированные результаты
Вторая ситуация - когда вы хотите выполнить небольшую операцию с каждым из элементов, но вы также хотите выполнить «функцию агрегирования» в конце, чтобы получить скалярное значение (или массив, есливход представляет собой матрицу). В этих случаях вы можете использовать @distributed
(aggregationFunction) для конструкции.
Например, вы выполняете параллельно деление на 2, а затем используете сумму в качестве функции агрегирования. (предположим, что доступны три рабочих процесса):
function f(n)
s = 0.0
for i = 1:n
s += i/2
end
return s
end
function pf(n)
s = @distributed (+) for i = 1:n # aggregate using sum on variable s
i/2
# last element of for cycle is used by the aggregator
end
return s
end
@benchmark f(10000000) # median time: 11.478 ms
@benchmark pf(10000000) # median time: 4.458 ms
(из Справочник по синтаксису Julia )
В качестве альтернативы вы можете использовать потоки. У Julia уже есть многопоточность, но в Julia 1.3 (которая должна появиться через несколько дней / недель, в rc4 на момент написания) будет введен всеобъемлющий API потоков.