Parallel processing 在Julia中使用@distributed进行引导

Parallel processing 在Julia中使用@distributed进行引导,parallel-processing,julia,statistics-bootstrap,Parallel Processing,Julia,Statistics Bootstrap,我想在Julia中做一个简单的Monte Carlo bootstrap类型模拟。刚开始学习Julia,发现有一种方法可以使用@distributed并行处理事情。所以我写了这段简单的代码,但花了很多钱后,我真的不明白它为什么会失败。一些帮助会真正帮助我学习 using Random, RCall, StatsBase, HypothesisTests, Suppressor, Distributed, BenchmarkTools, Statistics @everywhere using R

我想在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)
使用随机、RCall、StatsBase、假设测试、抑制器、分布式、基准工具、统计
@到处使用随机、RCall、StatsBase、假设测试、抑制器、分布式、基准工具、统计;rmprocs(workers());addprocs(4);nworkers()
功能设置(n、B、nl、sl)
取1:nl中m的_计数器=@distributed(+)
Y=randn(n)
平均值Y=平均值(Y)
计数器=0
对于i=1:B
Y_st=样本(Y,n,replace=真)
平均值=平均值
如果平均值>平均值
计数器+=1
终止
终止
p_值=计数器/B
如果p_值

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

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

此代码适用于我:

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)
使用分布式
rmprocs(workers());addprocs(4);nworkers()
@到处都在使用统计数据
功能设置(n、B、nl、sl)
@1:nl中m的分布(+)
Y=randn(n)
平均值Y=平均值(Y)
计数器=0
对于i=1:B
Y_st=兰特(Y,n)
平均值=平均值
如果平均值>平均值
计数器+=1
终止
终止
p_值=计数器/B
Int(p_值
(基本上相同,只有少量轻微扭曲)。请让我知道它是否对您有效或失败,以便我们可以进一步诊断您的问题


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

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

此代码适用于我:

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)
使用分布式
rmprocs(workers());addprocs(4);nworkers()
@到处都在使用统计数据
功能设置(n、B、nl、sl)
@1:nl中m的分布(+)
Y=randn(n)
平均值Y=平均值(Y)
计数器=0
对于i=1:B
Y_st=兰特(Y,n)
平均值=平均值
如果平均值>平均值
计数器+=1
终止
终止
p_值=计数器/B
Int(p_值
(基本上相同,只有少量轻微扭曲)。请让我知道它是否对您有效或失败,以便我们可以进一步诊断您的问题


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

“如果我运行,我会收到一个巨大的错误”:请共享此错误:)。这使得帮助诊断问题变得更容易。“如果我运行,我会得到一个巨大的错误”:请分享这个错误:)。这使得帮助诊断问题变得更容易。非常感谢,您的建议帮助修复了代码,非常感谢。刚开始使用Julia(也感谢我的朋友Tileaman Conring),我在想我是否能在这里得到答案,但真的很感谢你和StackOverflow社区使用Julia。这让我更有灵感去使用Julia。@Shaikh-我在代码中修正了一行。它应该是
Y\u st=rand(Y,n)
,它从
Y
中提取样本并进行替换。前面我写了
rand(Y)
,它只从
Y
中删除了一个元素。很抱歉出现错误。没问题,谢谢您的修复,我刚刚更改了第一部分,效果很好!非常感谢,您的建议帮助修复了代码,非常感谢。刚开始使用Julia(也感谢我的朋友Tileaman Conring),我在想我是否能在这里得到答案,但真的很感谢你和StackOverflow社区使用Julia。这让我更有灵感去使用Julia。@Shaikh-我在代码中修正了一行。它应该是
Y\u st=rand(Y,n)
,它从
Y
中提取样本并进行替换。前面我写了
rand(Y)
,它只从
Y
中删除了一个元素。很抱歉出现错误。没问题,谢谢您的修复,我刚刚更改了第一部分,效果很好!