在 Julia 中使用 @distributed 进行引导

Bootstrapping using @distributed in Julia

我想在 Julia 中做一个简单的 Monte Carlo bootstrap 类型模拟。刚开始学习 Julia,发现有一种方法可以使用 @distributed 并行处理事情。于是就写了这么简单的代码,但是花了之后实在是想不明白为什么会失败。一些帮助真的可以帮助我学习

using Random, RCall, StatsBase, HypothesisTests, Suppressor, Distributed, BenchmarkTools, Statistics
@everywhere using Random, RCall, StatsBase, HypothesisTests, Suppressor, Distributed, BenchmarkTools, Statistics; rmprocs(workers()); addprocs(4); nworkers()

function setup(n, B, nl, sl)

    take_counter = @distributed (+) for m in 1:nl
        Y = randn(n)
        mean_Y = mean(Y)

        counter = 0
        for i = 1:B
                Y_st = sample(Y, n, replace = true)
                mean_Y_st = mean(Y_st)  


                if mean_Y_st > mean_Y
                    counter += 1
                end
        end
        p_value = counter/B


        if p_value < sl  
            1
        else 
            0
        end
    end
    take_counter  

 end    

take_counter = setup(25, 200, 40, 0.05)

如果我 运行 遇到严重错误,一些帮助可能会非常有用。非常感谢您的帮助。

我没有详细检查你的代码(特别是 - 我没有检查它是否计算出你想要的),只是简单地重写它以保留 运行.[=14 所需的内容=]

这段代码对我有用:

using Distributed

rmprocs(workers()); addprocs(4); nworkers()

@everywhere using Statistics

function setup(n, B, nl, sl)
    @distributed (+) for m in 1:nl
        Y = randn(n)
        mean_Y = mean(Y)
        counter = 0
        for i = 1:B
                Y_st = rand(Y, n)
                mean_Y_st = mean(Y_st)  
                if mean_Y_st > mean_Y
                    counter += 1
                end
        end
        p_value = counter / B
        Int(p_value < sl)
    end
end

take_counter = setup(25, 200, 40, 0.05)

(本质上是相同的,只是有一些小的改动)。请让我知道它是否对您有效,以便我们进一步诊断您的问题。

编辑:现在我已经查看了您的代码,可以看出问题出在哪里。您首先 运行 @everywhere 然后删除和添加工人。这意味着新工人身上没有@everywhere 运行。添加工人后,您必须 运行 @everywhere