走出並行計算的誤區,你應該在什麼時候用它?
AI 研習社按:本文為 Salesforce 知名數據科學家、機器學習工程師 Anmol Rajpurohit 對開發者的建議。對演算法進行並行處理,是業內常見的加速方式,但不少開發者對它的認識存在誤區。因此,Anmol Rajpurohit 用本文向大家說明,到底什麼時候才應該並行執行代碼、以及它的前提是什麼。
Anmol Rajpurohit
Anmol Rajpurohit :當一件任務能被分割為多個獨立處理(不必進行信息溝通與資源共享)的子任務,並行執行會是一個絕佳選擇。
即便這樣,效率,即如何高效地執行,仍是一個關鍵問題。這關乎能否真正實現並行化理論上的優點。
實際情況中,絕大多數代碼都有需要串列執行的部分。可並行的子任務,也需要某種形式的數據傳輸同步。因此,相比串列而言,預測並行化到底能否讓演算法運行地更快是一件十分困難的事。
相比按序處理任務所需要的計算周期,並行執行總是有額外代價——起碼包含把任務分割為子任務,以及把它們的結果整合起來。並行計算相比串列的性能,在很大程度上是由一個因素決定的:上述額外步驟耗費的時間,與並行執行節省的時間這兩者之間的差。
值得注意的是,並行化的帶來的額外步驟並不局限於代碼運行之時,還包括編寫並行計算代碼所需的額外時間,以及修復漏洞(並行 vs. 串列)。
有一項評估並行化表現的理論方法廣為人知——Amdahl』s law。它用下面的公式來度量並行執行子任務帶來的加速(多處理器) vs. 串列運行(單個處理器):
Slatency 是執行整個任務的理論加速;
s 是任務里受益於額外系統資源那部分的加速;
p 是受益於額外系統資源那部分所佔的執行時間的比例。
為認識到 Amdahl』s Law 的意義,請看下面的圖表。它展示了不同處理器核心數對應的理論加速。當然,這是基於所執行的任務所能達到的不同並行化程度。
有一件事要提醒諸位:並不是所有代碼都能被高效地並行。能在多處理器核心上實現理論上的加速水平,這樣的代碼可謂是鳳毛麟角。這是由於串列部分、內部信息交換成本等天然限制。通常,大型數據集才是並行執行的理想情形。但開發者不應該攝像並行化能帶來性能提升,而應該在搞並行化之前,先在任務的子集上對並行和串列誰優誰劣做一個比較。
viakdnuggets
※深度神經網路中的對抗樣本與學習
※如何用 TensorFlow 實現基於 LSTM 的文本分類
※看了這篇再決定要不要學TensorFlow
※什麼才算是真正的數據科學家?你算么?
TAG:唯物 |
※為什麼我勸你別用使用蘆薈膠避免要這4個誤區,都是為了你的臉!
※如果你皮膚不好,竟然還要這樣化妝,那你就陷入誤區了!
※區塊鏈的誤區以及應用,憑它這麼火你也要了解一下
※使用蘋果手機這麼久,這些操作誤區,你真的都知道嗎?
※總感覺時間不夠用?可能是你陷入了這些誤區
※想要自己氣色好,那就先從唇妝開始,在畫的時候這些誤區要避免
※為什麼你游泳比別人慢?可能你需要走出以下誤區
※減肥一直沒有效果?如果你陷入了這些誤區,再怎麼減也是浪費時間
※定製鑽戒的「誤區」,適不適合你,你該這麼看
※為什麼你的眼妝又臟又不好看?這些化妝誤區你是不是還在踩
※胸肌訓練沒有效果?那是因為你方法不正確,請走出這些誤區
※為什麼你會越穿越丑?可能是入了這些時髦誤區!
※減肥真的很難嗎?或許是你走進了誤區,避開它就對了
※健康減肥,就要走出這幾種誤區,值得你去知道
※蘆薈膠你真的會使用嗎?不要再進這些誤區了,會讓皮膚變得更差
※想要養好魚的你,是否也經歷過這樣的誤區……
※閃電是什麼?你可能對閃電還是不了解!我們甚至存在很多誤區
※塗口紅時,盡量要避免這3個「誤區」!我不說,你未必會知道!
※大碼的衣服卻穿上身不顯瘦?也許你中了這些誤區,現在改還不算晚
※在塗防晒的時候一定要避開這三個誤區,怪不得一點作用也沒有!