Julia中具有破坏性函数的用户定义类型的并行化

Julia中具有破坏性函数的用户定义类型的并行化,julia,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 破坏性功能在Ts的每个元素中更改a 有没有办法将for循环并行化SharedArray似乎不适用于用户定义的类型。在这种情况下,使用线程而不是进程来并行化循环会更简单 Threads.@threa

我有以下代码:

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
破坏性功能
Ts
的每个元素中更改
a


有没有办法将
for
循环并行化
SharedArray
似乎不适用于用户定义的类型。

在这种情况下,使用线程而不是进程来并行化循环会更简单

Threads.@threads for i = 1:N
   destructive_function!(Ts[i])
end
只需确保在启动JULIA之前设置了
JULIA\u NUM\u THREADS
环境变量。您可以使用
threads.nthreads()
函数检查运行的线程数


如果您想使用进程而不是线程,那么最简单的方法可能是使用
破坏性功能
返回修改后的值,然后运行
pmap(破坏性函数!,Ts)
在新数组中收集修改后的值(但这不会就地修改
Ts

无需使用
SharedArray
进行并行化。事实上,减少交流通常是有帮助的(在任何语言中)。谢谢!我怎样才能决定我应该使用哪一个呢?不幸的是,这是一个广泛的话题。这里有一些优秀的幻灯片,可以为您提供一些指导。我的经验是,多重处理使用起来更简单(不太容易出错),但如果必须在进程之间移动大量数据,则会更慢。