開始使用免費開始

計時 parSapply()

擲骰子遊戲的執行屬於「極度可平行化」(embarrassingly parallel)。這類模擬通常(但不一定)能帶來不錯的加速效果。和之前一樣,你可以使用 microbenchmark()system.time()。為了簡化,本題我們使用 system.time()

本練習屬於課程

撰寫高效 R 程式碼

檢視課程

練習說明

play() 函式已經定義在你的工作區。我們要執行 100,000 場遊戲。

  • no_of_games 設為 1e5
  • 使用 system.time() 為連續(序列)重複呼叫 play() 計時。
    • 1:no_of_gamesplay() 包裝函式呼叫 sapply()
    • 將結果指定給 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)
編輯並執行程式碼