
152
|
第
7
章
library("parallel")
no_of_cores = detectCores()
detectCores() 的返回值取决于操作系统与芯片制造商,详见
help("detectCores")。对于多数标准机器,detectCores() 返回同时运行的
线程数。
Apply
函数的并行版本
并行应用程序中常见的函数是 lapply()、sapply() 与 apply() 的并行化替代
函数。下面代码显示并行化的版本以及它们的参数:
parLapply(cl, x, FUN, ...)
parApply(cl = NULL, X, MARGIN, FUN, ...)
parSapply(cl = NULL, X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
关键一点是 parLapply() 与 apply() 之间的参数差异很少,所以如果你已熟
悉
apply
家族的函数,进行并行化计算的门槛是很低的。这些函数中的每一个
都有一个 makeCluster() 函数调用时生成的参数 cl。该函数除别的功能外,
指定了要使用的
CPU
数目。
例子:蛇梯棋游戏
并行计算是
Monte Carlo
模拟的理想选择。每个核独立模拟了该模型的实
现。最后,我们收集结果。在
efficient
包,有一个模拟蛇梯棋游戏的函数;
snakes_ladders()。
注
3
下面代码演示了如何使用 sapply() 模拟
N
游戏:
N = 10^4
sapply(1:N, ...