开始使用免费开始使用

计时 parSapply()

掷骰子游戏是"极易并行化"的。这类模拟通常(但不总是)能带来不错的加速效果。与之前一样,您可以使用 microbenchmark()system.time()。为简化起见,本练习将使用 system.time()

本练习是课程的一部分

高效 R 代码写作

查看课程

练习说明

您的工作区中已定义 play() 函数。我们假设要玩十万局。

  • no_of_games 设为 1e5
  • 使用 system.time() 对串行反复调用 play() 的过程计时。
    • 使用 sapply(),传入 1:no_of_gamesplay() 包装函数。
    • 将结果赋给 serial
    • system.time() 包裹这次调用以计时。
  • 创建一个 4 核的集群对象,并将 play() 函数导出到该集群。
  • 使用 system.time() 对并行反复调用 play() 的过程计时。
    • 参考创建 serial 时的代码,将其改写为并行版本。

交互式实操练习

通过完成这段示例代码来试试这个练习。

# Set the number of games to play
no_of_games <- ___

# Time serial version
system.time(serial <- sapply(1:___, function(i) play()))

# Set up cluster
cl <- makeCluster(___)
clusterExport(cl, "play")

# Time parallel version
system.time(par <- ___)

# Stop cluster
stopCluster(cl)
编辑并运行代码