mclapply用户时间大于经过的时间

zim*_*ima 5 parallel-processing performance r

我正在尝试使用包的mclapply功能.该功能通过计算对数似然距离(CPU密集型操作)将值分配给序列矩阵.parallelR

结果system.time值令人困惑:

> system.time(mclapply(worksample,function(x){p_seqi_modj(x,worksample[[1]],c(1:17))}))
   user  system elapsed 
 29.339   1.242  18.581 
Run Code Online (Sandbox Code Playgroud)

我认为这elapsed意味着聚合时间(user+ system).在这种情况下,上述结果意味着什么?我应该在什么时候定位自己?我的非平行版本花费的时间更少,user而且更多elapsed.

Mar*_*gan 4

帮助页面?system.time说函数返回的值是类 proc_time 的对象,我们应该查阅?proc.time。在那里我们了解到用户时间是

cumulative sum of user and system times of any child processes
Run Code Online (Sandbox Code Playgroud)

所以你的任务在每个核心上花费了大约 15 秒(mclapply默认使用 2 个核心,请参阅mc.cores参数)。

实际上,我们在帮助页面的前面看到它proc.time()返回五个元素,将进程和子时间分开,并且打印中使用的摘要方法将用户和系统时间折叠为进程+子时间,因此还有更多可用信息。