我有以下代码:
mutable struct T
a::Vector{Int}
end
N = 100
len = 10
Ts = [T(fill(i, len)) for i in 1:N]
for i = 1:N
destructive_function!(Ts[i])
end
destructive_function!
在a
的每个元素中更改了Ts
。
有没有办法并行化for
循环? SharedArray
似乎不适用于用户定义的类型。
答案 0 :(得分:2)
在这种情况下,使用线程而不是进程来并行化循环
会更简单Threads.@threads for i = 1:N
destructive_function!(Ts[i])
end
在启动Julia之前,请确保设置JULIA_NUM_THREADS
环境变量。您可以使用Threads.nthreads()
函数检查运行的线程数。
如果你想使用进程而不是线程,那么最简单的方法是让destructive_function!
返回修改后的值,然后运行pmap(destructive_function!, Ts)
来收集新数组中的修改值(但这不会修改Ts
到位。