2016-08-02 56 views
1

我试图评估r中的串行和并行执行的时间。当比较“lapply”函数和“parLapply”函数时,我得到了以下结果。使用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

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