Я новичок в использовании Julia, и после нескольких курсов по numeri c анализ программирования стал моим хобби. Я провел несколько тестов со всеми своими ядрами и сделал то же самое с потоками для сравнения. Я заметил, что выполнение более тяжелых вычислений с потоковым l oop прошло лучше, чем с процессом, но примерно так же было, когда дело дошло до сложения. (операции были выбраны случайным образом, например). После некоторого исследования все довольно расплывчато, и в конечном итоге я хочу получить некоторую точку зрения от кого-то, кто использует тот же язык, если это вообще имеет значение.
Некоторая техническая информация: 8 физических ядер, Джулия добавлен вектор из 16 после addprocs()
и nthreads() is 16
using Distributed
addprocs()
@everywhere using SharedArrays;
@everywhere using BenchmarkTools;
function test(lim)
r = zeros(Int64(lim / 16),Threads.nthreads())
Threads.@threads for i in eachindex(r)
r[Threads.threadid()] = (BigInt(i)^7 +5)%7;
end
return sum(r)
end
@btime test(10^4) # 1.178 ms (240079 allocations: 3.98 MiB)
@everywhere function test2(lim)
a = SharedArray{Int64}(lim);
@sync @distributed for i=1:lim
a[i] = (BigInt(i)^7 +5)%7;
end
return sum(a)
end
@btime test2(10^4) # 3.796 ms (4413 allocations: 189.02 KiB)