
高效优化
|
153
library("parallel")
cl = makeCluster(4)
而后简单地将 sapply() 替换成 parSapply():
parSapply
(
cl, 1:N, snakes_ladders
)
停止已创建的集群是很重要的,因为这会导致内存泄漏,
注
4
下面代码说明这
点 :
stopCluster
(
cl
)
如果我们实现了完美的并行化并使用了
4
(或更多)核,那我们将获得四倍的
速度提升(我们设置了 makeCluster(4))。不过我们很少能得到这个结果。
在多处理计算机中,这能导致四倍速度提升。然而很少得到这种优化速度,
因为线程间总有通信。
谨慎退出
每次当你用完一个集群对象时要调用 stopCluster() 来释放资源。然而,如
果使用并行代码的函数出错,StopCluster() 命令将被忽略。
on.exit() 函数以最少代价处理该问题,不管函数如何退出,on.exit() 一定
会被调用。在并行编程环境中,应有与下列代码类似的代码:
simulate = function(cores) {
cl = makeCluster(cores)
on.exit(stopCluster(cl))
# Do something
}
on.exit() 的另外一个常见用法是配合 par() 函数。如果你使用 par() 函数
在一个函数内改变图形参数,on.exit() 确保了在 par() 函数退出时,这些
参数恢复到它们先前的值。
注
4
:
github.com/npct/pct-shiny/issues/292 ...