使用parLapply减少经过时间/用户时间

时间:2016-08-02 02:43:33

标签: r parallel-processing lapply elapsedtime

我试图评估r中串行和并行执行的时间。比较“lapply”函数和“parLapply”函数时,我得到了以下结果。

vec1 <- 1:400000
system.time(result <- lapply(vec1, function(x) x+2))

#using 3 nodes
cl3 <- snow::makeCluster(c("localhost","localhost","localhost"), type = "SOCK")
snow::clusterExport(cl3, c("vec1"), envir = .GlobalEnv)
system.time(clus3 <- snow::parLapply(cl3, vec1, function(x) x+2))
snow::stopCluster(cl3)

lapply:用户时间= 0.69,经过时间= 0.70 parLapply:用户时间= 0.49,经过时间= 0.92

虽然减少了用户时间,但似乎增加了经过的时间。会发生这种情况还是我做错了什么?因为我认为在使用并行执行时应该减少经过的时间。

1 个答案:

答案 0 :(得分:2)

如果您在单个节点上计算的任务需要很长时间才能运行,这将反映在减少的经过时间上。另一方面,如果计算量很小,大部分时间将用于维护(设置会话,移动数据,检索数据......)并使无效甚至否定并行计算的效果。