跳轉到內容

計算機科學基礎/並行處理

來自華夏公益教科書,開放的書籍,為開放的世界

計算從根本上來說是關於資訊過程。在數字計算機中,這些過程是透過二進位制邏輯中的符號操作來進行的。隨著半導體技術的進步,我們能夠透過將更多電晶體塞入計算機晶片中來使計算機執行得更快,即以更高的速度操作位。這被稱為 摩爾定律,起源於 1970 年代。正如一些 物理學家 所預測的那樣,這種增長趨勢正在放緩,最終將因物理限制而趨於平緩,他們還預測了可能取代半導體(矽)的潛在新技術在計算機硬體製造中的應用。

與此同時,硬體公司一直在調整其技術以保持硬體容量的增長。多核技術用許多較慢的 CPU(中央處理單元——計算機的大腦)替換一個快速的 CPU,以避免晶片過熱。即使每個核心都比較慢,但我們擁有更多核心,並且如果我們能夠正確安排工作,就能完成更多工。例如,一個強壯的工人每分鐘可以搬運 100 塊磚,而一個普通的工人只能搬運 34 塊磚。三個普通的工人可以勝過一個強壯的工人,即使他們單獨的速度要慢得多。這就是並行處理的理念。

傳統上,計算機程式被編寫為描述順序過程,這意味著步驟只能按順序逐個執行。這種型別的程式在一臺具有單個處理器的計算機上執行良好,因為計算機一次只能執行一個符號操作。事實上,我們一直在享受摩爾定律帶來的好處:每隔兩年,計算機硬體的速度就會翻倍,使我們的程式執行速度快兩倍,而我們無需做任何事情。這種趨勢已經停止了。每個單獨的處理器(核心)的速度並沒有提高,但我們在一臺計算機中擁有更多核心。因此,即使硬體容量已經變大,我們現有的順序程式也會執行得更慢。在下一代計算機問世之前,我們可以使用 平行計算/處理 來更快地解決計算問題。

並行處理的理念並不新鮮。例如,汽車裝配線允許多輛汽車同時生產。即使汽車的不同部件在同一時間被組裝,這條裝配線也能讓所有工人都忙於工作,從而提高整個系統的吞吐量(每單位時間生產的汽車數量)。我們可以讓工人們工作更快以進一步提高吞吐量,或者我們可以增加另一條裝配線並僱傭更多工人。這是一種並行處理的形式——流水線。另一種形式的並行處理將整個計算任務分解成可以同時計算的多個部分,並在不同的 CPU(計算機)上物理執行這些部分。這類似於和朋友一起拼拼圖。你可以想象,有一些額外的幫助肯定會幫助你更快地完成拼圖,但這是否意味著越多越好?答案是否定的。隨著幫助者數量的增加,協調和通訊量的增加速度更快。當你擁有太多人時,他們可能會開始互相踩踏,併為資源(空間和拼圖塊)互相競爭。這被稱為並行處理的開銷,會導致投資回報遞減。當我們測量效能改進與參與人員數量的關係時,可以清楚地看到這種模式。

在並行處理/計算的背景下,我們使用一個稱為 加速比 的指標來衡量效能改進。實現的加速比等於沒有並行處理的程式的解決方案/執行時間除以使用並行處理的同一任務的執行時間。

其中

  • 是加速比。
  • 是沒有並行處理的舊執行時間。
  • 是使用並行處理的新的執行時間。

如果並行處理使程式執行速度快兩倍,則加速比為二(也稱為兩倍加速)。從理論上講,當我們將工人或資源數量加倍時,我們可以預期加速比也加倍。實際上,很難實現這種最佳加速比,因為有些任務並不總是可並行的。例如,你通常不能在房屋地板建造好之前鋪地毯,也不能總是增加更多的油漆工來加快油漆工作。計算任務通常具有類似的依賴關係和資源約束,使我們無法充分利用我們擁有的並行處理系統(例如,多核計算機)。

練習

使用洗衣機和烘乾機,你一次只能處理一批衣物。你首先洗滌,然後將衣物放入烘乾機。假設整個任務需要一個小時。當你只有一批衣物要處理時,這非常完美,而且你無法更快地完成。如果你要處理很多批衣物怎麼辦?你至少可以每小時完成一批衣物。你能“加速”它嗎?如果衣物批次的數量可以任意增加,那麼你能達到的每批衣物最短平均時間是多少?

華夏公益教科書