電腦性能之殤(二)– 分支預測、流水線與多核 CPU

  • 2019 年 12 月 30 日
  • 筆記

摘要: 如何提高CPU性能?

Fundebug經授權轉載,版權歸原作者所有。

CPU 硬體為了提高性能,逐步發展出了指令流水線(分支預測)和多核 CPU,本文我們就將簡單地探討一下它們的原理和效果。

指令流水線

在一台純粹的圖靈機中,指令是一個一個順序執行的。而現實世界的通用電腦所用的很多基礎演算法都是可以並行的,例如加法器和乘法器,它們可以很容易地被切分成可以同時運行的多個指令,這樣就可以大幅提升性能。

指令流水線,說白了就是 CPU 電路層面的並發。

Intel Core i7 自 Sandy Bridge(2010)架構以來一直都是 14 級流水線設計。基於 Cedar Mill 架構的最後一代奔騰4,在 2006 年就擁有 3.8GHz 的超高頻率,卻因為其長達 31 級的流水線而成了為樣子貨,被 AMD 1GHz 的晶片按在地上摩擦。

RISC機器的五層流水線示意圖

下圖形象的展示了流水線式如何提高性能的。

缺點

指令流水線通過硬體層面的並發來提高性能,卻也帶來了一些無法避免的缺點。

  • 設計難度高,一不小心就成為了高頻低能的奔四
  • 並發導致每一條指令的執行時間變長
  • 優化難度大,有時候兩行程式碼的順序變動就可能導致數倍的性能差異,這對編譯器提出了更高的要求
  • 如果多次分支預測失敗,會導致嚴重的性能損失

分支預測

指令形成流水線以後,就需要一種高效的調控來保證硬體層面並發的效果:最佳情況是每條流水線里的十幾個指令都是正確的,這樣完全不浪費時鐘周期。而分支預測就是干這個的:

分支預測器猜測條件表達式兩路分支中哪一路最可能發生,然後推測執行這一路的指令,來避免流水線停頓造成的時間浪費。但是,如果後來發現分支預測錯誤,那麼流水線中推測執行的那些中間結果全部放棄,重新獲取正確的分支路線上的指令開始執行,這就帶來了十幾個時鐘周期的延遲,這個時候,這個 CPU 核心就是完全在浪費時間。

幸運的是,當下的主流 CPU 在現代編譯器的配合下,把這項工作做得越來越好了。

還記得那個讓 Intel CPU 性能跌 30% 的漏洞修補程式嗎,那個漏洞就是 CPU 設計的時候,分支預測設計的不完善導致的。

多核 CPU

多核 CPU 的每一個核心擁有自己獨立的運算單元、暫存器、一級快取、二級快取,所有核心共用同一條記憶體匯流排,同一段記憶體。

多核 CPU 的出現,標誌著人類的積體電路製程遇到了一個嚴酷的瓶頸,沒法再大規模提升單核性能,只能使用多個核心來聊以自慰。實際上,多核 CPU 性能的提升極其有限,遠不如增加一點點單核頻率提升的性能多。

優勢

多核 CPU 的優勢很明顯,就是可以並行地執行多個圖靈機,可以顯而易見地提升性能。只不過由於使用同一條記憶體匯流排,實際帶來的效果有限,並且需要作業系統和編譯器的密切配合才行。

題外話: AMD64 技術可以運行 32 位的作業系統和應用程式,所用的方法是依舊使用 32 位寬的記憶體匯流排,每計算一次要取兩次記憶體,性能提升也非常有限,不過好處就是可以使用大於 4GB 的記憶體了。大家應該都沒忘記第一篇文章中提到的馮·諾依曼架構擁有 CPU 和記憶體通訊頻寬不足的弱點。(註:AMD64 技術是和 Intel 交叉授權的專利,i7 也是這麼設計的)

劣勢

多核 CPU 劣勢其實更加明顯,但是人類也沒有辦法,誰不想用 20GHz 的 CPU 呢,誰想用這八核的 i7 呀。

  • 記憶體讀寫效率不變,甚至有降低的風險
  • 作業系統複雜度提升很多倍,計算資源的管理複雜了太多了
  • 依賴作業系統的進步:微軟以肉眼可見的速度,在這十幾年間大幅提升了 Windows 的多核效率和安全性:XP 只是能利用,7 可以自動調配一個進程在多個核心上遊走,2008R2 解決了依賴 CPU0 調度導致死機的 bug(中國的銀行提的 bug 哦),8 可以利用多核心啟動,10 優化了殺進程依賴 CPU0 的問題。

超執行緒技術

Intel 的超執行緒技術是將 CPU 核心內部再分出兩個邏輯核心,只增加了 5% 的裸面積,就帶來了 15%~30% 的性能提升。

懷念過去

Intel 肯定懷念摩爾定律提出時候的黃金年代,只依靠製程的進步,就能一兩年就性能翻番。AMD 肯定懷念 K8 的黃金一代,1G 戰 4G,靠的就是把記憶體控制器從北橋晶片移到 CPU 內部,提升了 CPU 和記憶體的通訊效率,自然性能倍增。而今天,人類的技術已經到達了一個瓶頸,只能通過不斷的提升 CPU 和作業系統的複雜度來獲得微弱的性能提升,嗚呼哀哉。

不過我們也不能放棄希望,AMD RX VAGA64 顯示卡擁有 2048 位的顯示記憶體位寬,理論極限還是很恐怖的,這可能就是未來記憶體的發展方向。

相關日誌

版權聲明

轉載時請註明作者 Fundebug以及本文地址: https://blog.fundebug.com/2018/12/29/about-computer-performance-part-2/

您的用戶遇到BUG了嗎?

體驗Demo 免費使用

.copyright *{box-sizing:border-box}