Julia 中的并行 for 循环

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)

Prz*_*fel 3

正如其他人指出的那样,没有足够的细节。然而,考虑到当前的信息状态,最有可能发挥作用的最安全的代码是:

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)

分布式方法完全分离进程,因此您做错事的机会要少得多(例如,使用具有共享资源的库等)。