pre*_*114 6 parallel-processing distributed julia
我知道关于在 Julia 中使用 @threads、@distributed 和其他方法运行并行 for 循环存在很多问题。我尝试在那里实施解决方案,但没有成功。我想做的结构如下。
for index in list_of_indices
data = h5read("data_set_$index.h5")
result = perform_function(data)
save(result)
end
Run Code Online (Sandbox Code Playgroud)
数据集是独立的,并且该循环的任何部分都不依赖于任何其他部分。看来这应该是可并行的。
我尝试过,例如
“@threads for index in list_of_indices...”并且出现分段错误
“@distributed for index in list_of_indices...”并且代码实际上并未对我的数据执行该功能。
我想我错过了一些关于并行进程如何工作的信息,任何见解将不胜感激。
这是一个 MWE:
假设我们的工作目录中有文件 data_1.h5、data_2.h5、data_3.h5。(我不知道如何使事情比这更独立,因为我认为问题是由要求多个线程读取文件引起的。)
using Distributed
using HDF5
list = [1,2,3]
Threads.@threads for index in list
data = h5read("data_$index.h5", "data")
println(data)
end
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
signal (11): Segmentation fault
signal (6): Aborted
Allocations: 1587194 (Pool: 1586780; Big: 414); GC: 1
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
正如其他人指出的那样,没有足够的细节。然而,考虑到当前的信息状态,最有可能发挥作用的最安全的代码是:
using Distributed
addprocs(4)
@everywhere using HDF5
list = [1,2,3]
@sync @distributed for index in list
data = h5read("data_$index.h5", "data")
println(data)
end
Run Code Online (Sandbox Code Playgroud)
分布式方法完全分离进程,因此您做错事的机会要少得多(例如,使用具有共享资源的库等)。