0
本文作者: 三川 | 2017-04-26 14:58 |
雷鋒網(wǎng)按:本文為 Salesforce 知名數(shù)據(jù)科學家、機器學習工程師 Anmol Rajpurohit 對開發(fā)者的建議。對算法進行并行處理,是業(yè)內(nèi)常見的加速方式,但不少開發(fā)者對它的認識存在誤區(qū)。因此,Anmol Rajpurohit 用本文向大家說明,到底什么時候才應該并行執(zhí)行代碼、以及它的前提是什么。
Anmol Rajpurohit
Anmol Rajpurohit :當一件任務能被分割為多個獨立處理(不必進行信息溝通與資源共享)的子任務,并行執(zhí)行會是一個絕佳選擇。
即便這樣,效率,即如何高效地執(zhí)行,仍是一個關(guān)鍵問題。這關(guān)乎能否真正實現(xiàn)并行化理論上的優(yōu)點。
實際情況中,絕大多數(shù)代碼都有需要串行執(zhí)行的部分??刹⑿械淖尤蝿?,也需要某種形式的數(shù)據(jù)傳輸同步。因此,相比串行而言,預測并行化到底能否讓算法運行地更快是一件十分困難的事。
相比按序處理任務所需要的計算周期,并行執(zhí)行總是有額外代價——起碼包含把任務分割為子任務,以及把它們的結(jié)果整合起來。并行計算相比串行的性能,在很大程度上是由一個因素決定的:上述額外步驟耗費的時間,與并行執(zhí)行節(jié)省的時間這兩者之間的差。
值得注意的是,并行化的帶來的額外步驟并不局限于代碼運行之時,還包括編寫并行計算代碼所需的額外時間,以及修復漏洞(并行 vs. 串行)。
有一項評估并行化表現(xiàn)的理論方法廣為人知——Amdahl’s law。它用下面的公式來度量并行執(zhí)行子任務帶來的加速(多處理器) vs. 串行運行(單個處理器):
Slatency 是執(zhí)行整個任務的理論加速;
s 是任務里受益于額外系統(tǒng)資源那部分的加速;
p 是受益于額外系統(tǒng)資源那部分所占的執(zhí)行時間的比例。
為認識到 Amdahl’s Law 的意義,請看下面的圖表。它展示了不同處理器核心數(shù)對應的理論加速。當然,這是基于所執(zhí)行的任務所能達到的不同并行化程度。
有一件事雷鋒網(wǎng)需要提醒諸位:并不是所有代碼都能被高效地并行。能在多處理器核心上實現(xiàn)理論上的加速水平,這樣的代碼可謂是鳳毛麟角。這是由于串行部分、內(nèi)部信息交換成本等天然限制。通常,大型數(shù)據(jù)集才是并行執(zhí)行的理想情形。但開發(fā)者不應該攝像并行化能帶來性能提升,而應該在搞并行化之前,先在任務的子集上對并行和串行誰優(yōu)誰劣做一個比較。
via kdnuggets,雷鋒網(wǎng)編譯
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。