R parLapply需要花费更多时间才能完成

时间:2019-05-14 03:36:33

标签: r rparallel

我在循环内运行parLapply函数,并验证了奇怪的行为。每次迭代的时间显着增加,这种增加没有多大意义。

因此,我开始为周期内的函数计时,以查看哪个函数花费的时间最多,然后我发现parLapply花费的时间> 95%。因此,我进入了parLapply函数并对其进行了计时,以查看函数内部与外部之间的时间是否匹配。而且他们并没有很大的差距。该余量随时间增加,并且差异可以达到几秒钟,这对算法完成所花费的时间有很大影响。

while (condition) {
      start.time_1 <- Sys.time()

      predictions <- parLapply(cl, array, function(i){
        start.time_par <- Sys.time()

        #code

        end.time <- Sys.time()
        time.taken_par<- end.time - start.time_par
        print(time.taken_par)

        return(value)
      })

      end.time <- Sys.time()
      time.taken <- end.time - start.time_1
      print(time.taken)
}

我希望time.taken类似于所有time.taken_par的总和。但事实并非如此。通常,time.taken_par的总和为0.026秒,而time.taken以该值的4倍开始,这很好,但随后会增加很多(> 5秒)。

谁能解释正在发生的事情和/或我认为应该发生的事情是错误的?这是内存问题吗?

感谢您的帮助!

编辑:

parLapply的输出如下。但是在我的测试中,有10个列表,而不是本例中的3个。 parLapply返回的每个单独列表的大小始终相同,在这种情况下为25。

[1] 11
[[1]]
          1           2           3           4           5           6           7           8           9          10          11          12          13          14 
-0.01878590 -0.03462315 -0.03412670 -0.06016549 -0.02527741 -0.06271799 -0.05429947 -0.02521108 -0.04291305 -0.03145491 -0.08571382 -0.07025075 -0.07704650  0.25301839 
         15          16          17          18          19          20          21          22          23          24          25 
-0.02332236 -0.02521089 -0.01170326  0.41469539 -0.15855689 -0.02548952 -0.02545446 -0.10971302 -0.02521836 -0.09762386  0.02044592 

[[2]]
          1           2           3           4           5           6           7           8           9          10          11          12          13          14 
-0.01878590 -0.03462315 -0.03412670 -0.06016549 -0.02527741 -0.06271799 -0.05429947 -0.02521108 -0.04291305 -0.03145491 -0.08571382 -0.07025075 -0.07704650  0.25301839 
         15          16          17          18          19          20          21          22          23          24          25 
-0.02332236 -0.02521089 -0.01170326  0.41469539 -0.15855689 -0.02548952 -0.02545446 -0.10971302 -0.02521836 -0.09762386  0.02044592 

[[3]]
          1           2           3           4           5           6           7           8           9          10          11          12          13          14 
-0.01878590 -0.03462315 -0.03412670 -0.06016549 -0.02527741 -0.06271799 -0.05429947 -0.02521108 -0.04291305 -0.03145491 -0.08571382 -0.07025075 -0.07704650  0.25301839 
         15          16          17          18          19          20          21          22          23          24          25 
-0.02332236 -0.02521089 -0.01170326  0.41469539 -0.15855689 -0.02548952 -0.02545446 -0.10971302 -0.02521836 -0.09762386  0.02044592 

Edit2:

好的,我发现了问题所在。我有一个使用vector("list",10000)初始化的数组。在循环的每次迭代中,我都会向该数组添加一个列表列表。该列表列表的大小为6656字节。因此,在10000次迭代中,其总和甚至达不到0.1Gb。但是,随着该阵列开始填充,并行化的性能开始下降。我不知道为什么会这样,因为我在具有64Gb RAM的计算机上运行脚本。这是一个已知问题吗?

0 个答案:

没有答案
相关问题