我试图评估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
虽然减少了用户时间,但似乎增加了经过的时间。会发生这种情况还是我做错了什么?因为我认为在使用并行执行时应该减少经过的时间。
答案 0 :(得分:2)
如果您在单个节点上计算的任务需要很长时间才能运行,这将反映在减少的经过时间上。另一方面,如果计算量很小,大部分时间将用于维护(设置会话,移动数据,检索数据......)并使无效甚至否定并行计算的效果。