計算機性能之殤(一)– 天才馮·諾依曼與馮·諾依曼瓶頸

  • 2019 年 12 月 30 日
  • 筆記

摘要: 理解馮·諾依曼架構。

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

本文的目標是在我有限的認知範圍內,討論一下人們為了提高性能做出的種種努力,這裏面包含硬件層面的 CPU、RAM、磁盤,操作系統層面的並發、並行、事件驅動,軟件層面的多進程、多線程,網絡層面的分佈式,等等等等。事實上,上述名詞並不局限於某一個層面,計算機從 CPU 內的門電路到顯示器上瀏覽器中的某行字,是層層協作才得以實現的;計算機科學中的許多概念,都跨越了層級:事件驅動就是 CPU 和操作系統協作完成的。

可能的文章列表

以下是可能的文章列表,我在撰寫過程中可能會隨時修改:

  • 天才馮·諾依曼與馮·諾伊曼瓶頸
  • 分支預測、流水線與多核 CPU
  • 通用電子計算機的胎記:事件驅動
  • Unix 進程模型的局限
  • DPDK、SDN 與大頁內存
  • 現代計算機最親密的夥伴:局部性與樂觀
  • 分佈式計算、超級計算機與神經網絡共同的瓶頸

天才 馮·諾依曼

馮·諾依曼1903年12月28日出生於奧匈帝國布達佩斯,1957年2月8日卒於美國,終年53歲。在他短暫的一生中,他取得了巨大的成就,遠不止於世人熟知的「馮·諾依曼架構」。

約翰·馮·諾伊曼,出生於匈牙利的美國籍猶太人數學家,現代電子計算機與博弈論的重要創始人,在泛函分析、遍歷理論、幾何學、拓撲學和數值分析等眾多數學領域及計算機學、量子力學和經濟學中都有重大貢獻。 – 約翰·馮·諾伊曼的維基百科

除了對計算機科學的貢獻,他還有一個稱號不被大眾所熟知:「博弈論之父」。博弈論被認為是20世紀經濟學最偉大的成果之一。(說到博弈論,我相信大多數人第一個想到的肯定跟我一樣,那就是「納什均衡」)

馮·諾依曼架構

馮·諾依曼由於在曼哈頓工程中需要大量的運算,從而使用了當時最先進的兩台計算機 Mark I 和 ENIAC,在使用 Mark I 和 ENIAC 的過程中,他意識到了存儲程序的重要性,從而提出了存儲程序邏輯架構。

「馮·諾依曼架構」定義如下:

  • 以運算單元為中心
  • 採用存儲程序原理
  • 存儲器是按地址訪問、線性編址的空間
  • 控制流由指令流產生
  • 指令由操作碼和地址碼組成
  • 數據以二進制編碼

優勢

馮·諾依曼架構第一次將存儲器和運算器分開,指令和數據均放置於存儲器中,為計算機的通用性奠定了基礎。雖然在規範中計算單元依然是核心,但馮·諾依曼架構事實上導致了以存儲器為核心的現代計算機的誕生。

註:請各位在心裏明確一件事情:存儲器指的是內存,即 RAM。磁盤理論上屬於輸入輸出設備。

該架構的另一項重要貢獻是用二進制取代十進制,大幅降低了運算電路的複雜度。這為晶體管時代超大規模集成電路的誕生提供了最重要的基礎,讓我們實現了今天手腕上的 Apple Watch 運算性能遠超早期大型計算機的壯舉,這也是摩爾定律得以實現的基礎。

瓶頸

馮·諾依曼架構為計算機大提速鋪平了道路,卻也埋下了一個隱患:在內存容量指數級提升以後,CPU 和內存之間的數據傳輸帶寬成為了瓶頸。

上圖是 i9-7980XE 18 核 36 線程的民用最強 CPU,其配合超頻過的 DDR4 3200MHz 的內存,測試出的內存讀取速度為 90GB/S。看起來很快了是不是?看看圖中的 L1 Cache,3.7TB/S。

我們再來算算時間。這顆 CPU 最大睿頻 4.4GHz,就是說 CPU 執行一個指令需要的時間是 0.000000000227273 秒,即 0.22ns(納秒),而內存的延遲是 68.1ns。換句話說,只要去內存里取一個位元組,就需要 CPU 等待 300 個周期,何其的浪費 CPU 的時間啊。

CPU L1 L2 L3 三級緩存是使用和 CPU 同樣的 14 納米工藝製造的硅半導體,每一個 bit 都使用六個場效應管(通俗解釋成三極管)構成,成本高昂且非常佔用 CPU 核心面積,故不能做成很大容量。

除此之外,L1 L2 L3 三級緩存對計算機速度的提升來源於計算機內存的「局部性」,相關內容我們之後會專門討論。

接下來

下一篇文章,我們將討論分支預測、流水線與多核 CPU,看看那些上古大神們為了提升性能都迸發出了什麼奇思妙想,搞出了什麼奇技淫巧。

相關日誌

版權聲明

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

您的用戶遇到BUG了嗎?

體驗Demo 免費使用

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