在 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
。
我想在 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
。