R嵌套的Foreach并行化不工作

R嵌套的Foreach并行化不工作,r,foreach,parallel-processing,R,Foreach,Parallel Processing,我很难让一些嵌套的foreach循环并行运行。情况如下: 该程序基本上使用不同数量的观察结果和不同水平的统计显著性进行假设检验。我有四个嵌套的foreach循环。项目data.structures是执行测试的矩阵列表。有两个不同的列表用于data.structures。一个列表包含243个矩阵(小列表),另一个列表包含19683个矩阵(大列表) 当我使用data.structures的小矩阵列表时,我可以看到Windows的资源监视器中的所有内核都得到了充分利用(100%的CPU使用率),每个内

我很难让一些嵌套的
foreach
循环并行运行。情况如下:

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

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

我不熟悉用R进行并行化。即使我简化了问题和函数,我仍然只能让程序与小列表并行运行。根据我自己的阅读,我想知道这是否是工作负载分配的问题。我加入了
.inoorder=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并行循环,可以执行,但不能以并行方式执行。

我怀疑您的内存不足,并且您的机器正在颠簸。“资源监视器是否告诉您使用了多少内存?谢谢您的建议,@SteveWeston我打开了资源监视器并重新运行程序,在最初几分钟内,内存使用率峰值仅为物理内存的21%。”。内存是否可能在将来的某个时间耗尽,而我还没有到达,但系统已经受到影响?我希望在整个循环过程中,主机上的内存使用会增加,但如果您只使用了21%的内存,那么这听起来不像是内存问题。我会考虑一下,但如果你能提供一个可复制的例子,那会有所帮助。
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)
    }