本章探討計算機中並行與串行的關係,從處理器內部的流水線技術,到摩爾定律的演進,再到雲計算中的分布式存儲與計算工具 GFS 和 MapReduce。核心觀點是:邏輯上串行的任務可以透過物理上的並行來加速,而系統的瓶頸往往決定了整體效能的上限。
8.1 流水線:邏輯串行和物理並行#
流水線的概念借鑑自工廠的裝配線。在處理器中,一條指令的執行可以分成多個階段(如取指、解碼、執行、存取記憶體、寫回),不同指令的不同階段可以在同一時間並行進行。
- 標準的 RISC 處理器將操作分為五個步驟,理想狀態下流水線可將效率提高五倍
- 計算機中流水線從表面上看是串行的,但實際上是處理器在硬體上並行執行,有足夠多的硬體來同時完成不同功能
- 流水線遇到分支指令(如 if-then-else)時會產生停滯,因為無法確定下一條指令,需要重新取指
邏輯上串行的任務可以通過流水線來完成,但要求有物理上並行的電路支持。
8.2 摩爾定律的兩條分水嶺#
摩爾定律指出處理器性能每 18 個月提高一倍。提升處理器性能有三條途徑:提高工作頻率、提高位數、提高複雜程度。
第一個分水嶺(約 2000 年):
- 2000 年前,處理器頻率從不到 1MHz 提升到 3GHz 以上,位數從 4 位提升到 64 位
- 2000 年後,隨著英特爾奔騰 4 NetBurst 處理器(最高 3.7GHz)的推出,頻率提升已接近極限
- 此後性能提升主要靠在處理器中裝入多核、多計算單元
- 程序需要拆解為串行和並行部分,才能充分發揮多核處理器的效能
第二個分水嶺(約 2016 年):
- 半導體行業從追求絕對性能,轉為追求單位能耗所能提供的計算量(相對性能)
- 2016 年 NVIDIA 推出針對深度學習的 Tesla GP100 處理器,單位能耗計算能力比通用服務器提高近兩個數量級
- Google 推出 TPU(張量處理器),針對 TensorFlow 算法的性能又提升了兩個數量級
- 當摩爾定律接近物理極限時,針對特定算法設計專用處理器成為必然趨勢
並行計算通過增加更多相同的硬體達到縮短計算時間的目的。在理想情況下,計算機性能的提升和硬體增加的倍數成正比,但通常並行計算都達不到這樣的效果。
8.3 雲計算揭密:GFS 和 MapReduce#
當單台服務器性能難以進一步提升時,使用多台服務器協同完成大任務就成為必要。GFS 和 MapReduce 是雲計算的兩個基礎工具,前者解決存儲問題,後者解決計算問題。
GFS(Google 文件系統)#
- 將大量零散的數據合併成大數據文件,再分成 64MB 大小的「大塊」(chunk)存儲
- 採用主從服務器架構:主服務器管理大塊的邏輯編號與物理位置的映射關係,從服務器實際存儲數據
- 每個文件有多個備份(通常 3 個),既防止數據丟失,也增加訪問帶寬
- 文件的不同數據塊及其備份分布在不同塊服務器上,提高可靠性和讀取速度
- GFS 的設計是為了順序讀/寫零星數據,不適合隨機讀寫
MapReduce#
- 核心思想是分治法:把大任務分成小任務完成後再合併結果
- Map(映射)階段:將數據分配到各服務器上並行處理
- Reduce(合併)階段:將各服務器的中間結果歸並合併
- 以統計 1TB 語料中的高頻二元組為例:1000 台服務器各自統計一部分數據(Map),然後按序號歸並到 100 台服務器上合併(Reduce)
- 對於超大數據量(如 1PB),可能需要做兩次 Map、一次 Reduce
- 整體時間複雜度為 O(D),主要瓶頸在網絡傳輸和磁盤讀寫
並行存儲要考慮兩個因素:多個備份的冗餘實現容錯,以及通過主服務器管理好存儲數據的從服務器。MapReduce 的核心思想是分治,Map 這一步操作容易實現並行處理;合併的過程,即 Reduce,視情況而定。
結束語#
- 要成為優秀的系統級工程師或架構師,必須能解決看似無法用現有條件完成的大問題
- 系統的運行時間取決於瓶頸上的步驟所需的運行時間,因此任何系統改進都需要首先解決瓶頸問題
- 計算機工程師需要培養兩個關鍵能力:一是對信息處理的「感覺」(如肌肉記憶般的直覺);二是能站在系統的角度來考慮所有應用問題