gpt4 book ai didi

parallel-processing - Julia中的大数据并行计算

转载 作者:行者123 更新时间:2023-12-04 05:48:22 25 4
gpt4 key购买 nike

首先我的问题:

  • 是否可以防止Julia在每次并行for循环中复制变量?
  • 如果没有,如何在Julia中实现并行的reduce操作?

  • 现在的细节:

    我有这个程序:
    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

    它明智地使用了不错的功能,但是在另一个工作线程上对fct(data)的每次并行调用都会复制整个数据帧,从而使所有操作都非常缓慢。

    理想情况下,我想一次加载数据,并始终在每个工作程序上使用每个预加载的数据。
    我想出了以下代码来做到这一点:
    @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

    但是现在我有另一个问题:我无法弄清楚如何将所有filter_data_temp vcat()转换为具有myid()== 1的工作器中的变量。

    我将不胜感激任何见解。

    注意:我知道 Operating in parallel on a large constant datastructure in Julia。但是,我不认为这适用于我的问题,因为我所有的filter_functions都在整个数组上运行。

    最佳答案

    您可能需要调查数据或将数据加载到Distributed Arrays

    编辑:大概是这样的:

    data = DataFrames.readtable("...")
    dfiltered_data = distribute(data) #distributes data among processes automagically
    filter_functions = [ fct1, fct2, fct3 ... ]
    for fct in filter_functions
    dfiltered_data = fct(dfiltered_data)::DataFrame
    end

    您还可以查看 unit tests以获取更多示例

    关于parallel-processing - Julia中的大数据并行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666282/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com