在Julia中使用具有破坏性功能的用户定义类型进行并行化

时间:2018-02-05 06:37:47

标签: julia

我有以下代码:

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似乎不适用于用户定义的类型。

1 个答案:

答案 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到位。