走出并行計算的誤區,你應該在什么時候用它?

jopen 7年前發布 | 5K 次閱讀

走出并行計算的誤區,你應該在什么時候用它?

本文為 Salesforce 知名數據科學家、機器學習工程師 Anmol Rajpurohit 對開發者的建議。對算法進行并行處理,是業內常見的加速方式,但不少開發者對它的認識存在誤區。因此,Anmol Rajpurohit 用本文向大家說明,到底什么時候才應該并行執行代碼、以及它的前提是什么。

走出并行計算的誤區,你應該在什么時候用它?

Anmol Rajpurohit

Anmol Rajpurohit :當一件任務能被分割為多個獨立處理(不必進行信息溝通與資源共享)的子任務,并行執行會是一個絕佳選擇。

即便這樣,效率,即如何高效地執行,仍是一個關鍵問題。這關乎能否真正實現并行化理論上的優點。

實際情況中,絕大多數代碼都有需要串行執行的部分。可并行的子任務,也需要某種形式的數據傳輸同步。因此,相比串行而言,預測并行化到底能否讓算法運行地更快是一件十分困難的事。

相比按序處理任務所需要的計算周期,并行執行總是有額外代價——起碼包含把任務分割為子任務,以及把它們的結果整合起來。并行計算相比串行的性能,在很大程度上是由一個因素決定的:上述額外步驟耗費的時間,與并行執行節省的時間這兩者之間的差。

值得注意的是,并行化的帶來的額外步驟并不局限于代碼運行之時,還包括編寫并行計算代碼所需的額外時間,以及修復漏洞(并行 vs. 串行)。

有一項評估并行化表現的理論方法廣為人知——Amdahl’s law。它用下面的公式來度量并行執行子任務帶來的加速(多處理器) vs. 串行運行(單個處理器):

走出并行計算的誤區,你應該在什么時候用它?

  • Slatency 是執行整個任務的理論加速;

  • s 是任務里受益于額外系統資源那部分的加速;

  • p 是受益于額外系統資源那部分所占的執行時間的比例。

為認識到 Amdahl’s Law 的意義,請看下面的圖表。它展示了不同處理器核心數對應的理論加速。當然,這是基于所執行的任務所能達到的不同并行化程度。

走出并行計算的誤區,你應該在什么時候用它?

有一件事雷鋒網需要提醒諸位:并不是所有代碼都能被高效地并行。能在多處理器核心上實現理論上的加速水平,這樣的代碼可謂是鳳毛麟角。這是由于串行部分、內部信息交換成本等天然限制。通常,大型數據集才是并行執行的理想情形。但開發者不應該攝像并行化能帶來性能提升,而應該在搞并行化之前,先在任務的子集上對并行和串行誰優誰劣做一個比較。

via kdnuggets

來自: 雷鋒網

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!