gpt4 book ai didi

R嵌套的Foreach并行化不起作用

转载 作者:行者123 更新时间:2023-12-04 11:24:05 26 4
gpt4 key购买 nike

我在获取一些嵌套时遇到了一些麻烦 foreach循环并行运行。这是情况:

该程序基本上使用不同数量的观察和不同的统计显着性水平来执行假设检验。我有四个嵌套的 foreach 循环。项目 data.structures是执行测试的矩阵列表。我使用了两个不同的列表 data.structures .一个列表包含 243 个矩阵(小列表),另一个包含 19,683 个(大列表)。

number.observations = c(50,100,250,500,1000)
significance.levels = c(.001,.01,.05,.1,.15)

require(foreach)
require(doParallel)

cl = makeCluster(detectCores())
registerDoParallel(cl)
results = foreach(data=data.structures,.inorder=FALSE,.combine='rbind') %:%
foreach(iter=1:iterations,.inorder=FALSE,.combine='rbind') %:%
foreach(number.observations=observations,.inorder=FALSE,.combine='rbind') %:%
foreach(alpha=significance.levels,.inorder=FALSE,.combine='rbind') %dopar% {
#SOME FUNCTIONS HERE
}

当我将矩阵的小列表用于 data.structures 时,我可以看到 Windows 的资源监视器中的所有内核都得到了充分利用(100% CPU 使用率),每个内核有 6 个线程用于 8 个进程,并且作业在更短的时间内按预期完成。但是,当我更改为更大的矩阵列表时,进程将启动,并且可以在资源监视器的进程部分中看到。八个进程中的每一个都显示三个线程,每个线程都没有 CPU 操作。总 CPU 使用率约为 12%。

我是 R 并行化的新手。即使我简化了问题和功能,我仍然只能让程序与小列表并行运行。根据我自己的阅读,我想知道这是否是工作负载分配的问题。我已经包含了 .inorder = FALSE尝试解决此问题的选项无济于事。我相当肯定这个程序是并行化的一个很好的候选者,因为它执行相同的任务数十万次并且循环不依赖于以前的值。

非常感谢任何帮助!

最佳答案

我的代码中也发生了类似的问题。

y= foreach(a= seq(1,500,1),.combine='rbind') %:% 
foreach(b = seq(1,10,1), .combine='rbind') %:%
foreach(c = seq(1,20,1), .combine='rbind' ) %:%
foreach (d = seq(1,50,1), .combine='rbind' ) %do% {
data.frame(a,b,c,d)
}

一个非常简单的嵌套foreach并行循环,它可以被执行,但只是不能以并行方式执行。

关于R嵌套的Foreach并行化不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30791959/

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