Parallel processing 在Julia中使用@distributed进行引导
我想在Julia中做一个简单的Monte Carlo bootstrap类型模拟。刚开始学习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
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
中删除了一个元素。很抱歉出现错误。没问题,谢谢您的修复,我刚刚更改了第一部分,效果很好!