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