【发布时间】:2023-03-13 16:53:01
【问题描述】:
我对并行 Julia 代码的尝试并没有随着线程数量的增加而提高性能。
无论我将 JULIA_NUM_THREADS 设置为 2 还是 32,以下代码的运行时间都差不多。
using Random
using Base.Threads
rmax = 10
dr = 1
Ngal = 100000000
function bin(id, Njobs, x, y, z, w)
bin_array = zeros(10)
for i in (id-1)*Njobs + 1:id*Njobs
r = sqrt(x[i]^2 + y[i]^2 + z[i]^2)
i_bin = floor(Int, r/dr) + 1
if i_bin < 10
bin_array[i_bin] += w[i]
end
end
bin_array
end
Nthreads = nthreads()
x = rand(Ngal)*5
y = rand(Ngal)*5
z = rand(Ngal)*5
w = ones(Ngal)
V = let
VV = [zeros(10) for _ in 1:Nthreads]
jobs_per_thread = fill(div(Ngal, Nthreads),Nthreads)
for i in 1:Ngal-sum(jobs_per_thread)
jobs_per_thread[i] += 1
end
@threads for i = 1:Nthreads
tid = threadid()
VV[tid] = bin(tid, jobs_per_thread[tid], x, y, z, w)
end
reduce(+, VV)
end
我做错了吗?
【问题讨论】:
标签: julia