Trước câu hỏi của tôi:tính toán song song trong Julia với dữ liệu lớn
- là nó có thể để ngăn chặn Julia sao chép các biến mỗi lần trong một song song cho vòng lặp?
- nếu không, làm thế nào để thực hiện một hoạt động giảm song song ở Julia?
Bây giờ các chi tiết:
tôi có chương trình này:
data = DataFrames.readtable("...") # a big baby (~100MB)
filter_functions = [ fct1, fct2, fct3 ... ] # (x::DataFrame) -> y::DataFrame
filtered_data = @parallel vcat for fct in filter_functions
fct(data)::DataFrame
end
Nó hoạt động chức năng đẹp khôn ngoan, nhưng mỗi cuộc gọi song song với FCT (dữ liệu) trên một bản sao công nhân toàn bộ khung dữ liệu, làm mọi thứ đau đớn chậm.
Lý tưởng nhất, tôi muốn tải dữ liệu một lần và luôn sử dụng từng dữ liệu trên mỗi công nhân dữ liệu được tải sẵn. tôi đã đưa ra đoạn mã này để làm như vậy:
@everywhere data = DataFrames.readtable("...") # a big baby (~100MB)
@everywhere filter_functions = [ fct1, fct2, fct3 ... ] # (x::DataFrame) -> y::DataFrame
@everywhere for i in 1:length(filter_functions)
if (myid()-1) % nworkers()
fct = filter_functions[i]
filtered_data_temp = fct(data)
end
# How to vcat all the filtered_data_temp ?
end
Nhưng bây giờ tôi có một vấn đề khác: Tôi không thể tìm ra cách để VCAT() tất cả các filtered_data_temp vào một biến trong người lao động với myid() == 1 .
Tôi rất cảm kích mọi thông tin chi tiết.
Lưu ý: Tôi biết về Operating in parallel on a large constant datastructure in Julia. Tuy nhiên, tôi không tin rằng nó áp dụng cho vấn đề của tôi bởi vì tất cả các filter_functions của tôi hoạt động trên mảng như một toàn thể.
Sau đó, có vẻ như tôi cũng có thể sử dụng pmap(). –