Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R、 对于每一步,doMPI都会随着迭代次数的增加而降低速度_R_Foreach_Parallel Processing_Dompi - Fatal编程技术网

R、 对于每一步,doMPI都会随着迭代次数的增加而降低速度

R、 对于每一步,doMPI都会随着迭代次数的增加而降低速度,r,foreach,parallel-processing,dompi,R,Foreach,Parallel Processing,Dompi,我已经在集群上使用了R、doMPI和foreach的组合好几年了,通常增加模拟迭代次数是非常线性的,就所需的执行时间而言。最近我一直在使用这个嵌套的foreach循环,当我增加模拟的数量(NumSim)时,速度会显著降低,我不知道为什么。有没有关于如何诊断或从哪里开始寻找的想法 例如,作为一个测试示例,有10个内核,其他所有的都保持相同,如果 NumSim=10,完成时间为678秒 NumSim=20,时间=1856秒 NumSim=30,时间=3560秒 NumSim=50,时间=7956秒

我已经在集群上使用了R、doMPI和foreach的组合好几年了,通常增加模拟迭代次数是非常线性的,就所需的执行时间而言。最近我一直在使用这个嵌套的foreach循环,当我增加模拟的数量(NumSim)时,速度会显著降低,我不知道为什么。有没有关于如何诊断或从哪里开始寻找的想法

例如,作为一个测试示例,有10个内核,其他所有的都保持相同,如果

NumSim=10,完成时间为678秒

NumSim=20,时间=1856秒

NumSim=30,时间=3560秒

NumSim=50,时间=7956秒

在之前的工作中,我预计NumSim=50几乎需要678*5~3390秒

results <- foreach (j = 1:NumSim, .combine = acomb) %:%
    ## Person Single Population
    foreach (i = 1:PopSize, .combine=rbind, .packages = c("zoo")) %dopar% {
    annual <- AnnualProbInf(WatCons, CrpPerLit, 1, 1, naf)
    daily <- AnnualProbInf(WatCons, CrpPerLit, 365, 365, khf)
    immune <- AnnualProbInfImm(WatCons, CrpPerLit, 730, 730, khf, DayNonSus)
    out <- cbind (annual, daily, immune)
    }

结果我遇到了类似的问题,所以运行了一些测试。得到了一些帮助,但还没有找到解决问题的办法。虽然我的具体示例使用doParallel,但我最近切换到了MPI,并遇到了相同的问题PopSize的值是多少?每个节点使用10个工人还是10个工人?AnnualProbInf是否返回单个数值或向量?我遇到了类似的问题,因此运行了一些测试。得到了一些帮助,但还没有找到解决问题的办法。虽然我的具体示例使用doParallel,但我最近切换到了MPI,并遇到了相同的问题PopSize的值是多少?每个节点使用10个工人还是10个工人?AnnualProbInf是否返回单个数值或向量?