我們該平行化嗎?

R 平行程式設計

Nabeel Imam

Data Scientist

一起來蓋大樓

   

在上一層上蓋新樓層:序向

 

在完工結構上裝窗戶:平行

一棟建築正在施工。樓層只能依序興建,但窗戶可以平行安裝。

R 平行程式設計

序向—平行 尺度

常見運算任務落在一個尺度上,一端是序向,另一端是平行。建立新變數接近平行端,累計總和接近序向端。

R 平行程式設計

經典數值運算

計算 100 萬個數的平方根

numbers <- 1:1000000


start <- Sys.time() sq_roots <- lapply(numbers, sqrt) end <- Sys.time()
end - start
Time difference of 1.044573 secs
R 平行程式設計

要如何平行化平方根?

平方根的平行計算流程圖。從 1 到 100 萬的整數被分成 5 組,每組長度 200,000。

R 平行程式設計

要如何平行化平方根?

分割後的資料被送往由多個核心組成的叢集。每組數字送到一個核心計算平方根。若所有可用核心都忙碌,新組別會等待有核心空出。

R 平行程式設計

要如何平行化平方根?

從各核心收集平方根並合併,得到 100 萬個結果。

R 平行程式設計

平行化的數值運算

以平行方式計算 100 萬個數的平方根

library(parallel)


my_cluster <- makeCluster(3)
start <- Sys.time() sq_roots <- parLapply(my_cluster, numbers, sqrt) end <- Sys.time()
stopCluster(my_cluster)
end - start
Time difference of 0.8416824 secs
R 平行程式設計

沒有想像中快

從 1 到 100 萬的數字進行平方根的平行計算流程圖。

R 平行程式設計

沒有想像中快

平行執行會有額外工作。首先是分割資料。

R 平行程式設計

沒有想像中快

分割之後,每個子資料集都要複製到叢集的核心上。

R 平行程式設計

沒有想像中快

計算完成後,需要從各核心收集輸出並合併成最後結果。

R 平行程式設計

沒有想像中快

協調整個流程也會耗用部分運算資源。

R 平行程式設計

所以,我們該平行化嗎?

對足夠複雜的任務,請考量:

優點

  • 比序向更快
  • 長期成本更划算

 

缺點

  • 需要特殊程式技巧(但你已經準備好了!)
  • 記憶體用量高
R 平行程式設計

一起來練習吧!

R 平行程式設計

Preparing Video For Download...