計算機系統結構 1:圖靈機

計算機系統結構【第一課摘要】

 


 

圖靈機:視角的不同

我們人類天然的思維方式叫正向思維,而我們的正向思維被稱爲 “遞推”(Iterative)。

遞推是人本能的正向思維,我們小時候學習數數,從1、2、3 ··· 100 ··· 10000 ··· ∞,就是典型的遞推;這種學習過程是循序漸進,由易到難,由小到大,由局部到整體,出發點是正向的;

類似於,學習語言時,先從拼音開始,再組詞,後簡單造句,接着使用"因爲…所以…"、“既然…於是…”、“不但…而且” 等連接詞,造成稍稍複雜的句子,這種思維方式便是遞推,是正向的。

在計算機還未被創建的年代裏,人們想問題也是正向的:【先做幾個能解決簡單問題的計算機,而後不斷優化,就會越做越複雜】。

直到 1900 年,德國數學家 希爾伯特 提出了 23 個歷史性的數學問題,這 23 個數學問題是數學家們對數學的思考。

在 1930 年左右,圖靈在思考其中的三個問題:

  1. 世界上是否所有的數學問題都有明確的答案?

在數學問題中,只有一小部分是有解的。

  1. 如果有明確的答案,是否可以通過有限步驟的計算得到答案?

在有解的問題中,只有一部分。

  1. 可以在有限步驟計算出的數學問題,能否有一種假象的機械,讓機械計算出?

有這種機械,不過圖靈機很長時間以來一直只存在於論文中,只是一個抽象的可以實施自動計算的思維模型,而實體 15 年之後纔出現… 22 歲的圖靈寫出了《論可計算數及其在判定問題上的應用》,人們之後就簡稱這篇文章爲《可計算數》,TA 從數學上定義了著名了“圖靈機”。

也許您對這些問題並沒有見解,但應該能體會到視角的不同。

世界上所有問題,不是一種角度就可以解決。

計算機和我們不同,計算機的正向思維被稱爲 “遞歸”(recursive),計算機天生就是爲大數處理而製造的,習慣從大到小、層層分解的思維。

您也看到了,是因爲圖靈思考的問題角度不同,所以計算機的正向思維也就不同…從事物的極限看過來…會當凌絕頂,一覽衆山小。

這倆種視角放在人身上:

  • 遞推:怎麼比他們強呢,在各個方面慢慢努力,小步子。

  • 遞歸:怎麼比他們強呢,不完全是比他們更努力,因爲這只是在低層次上的競爭,而是首先在見識和格局上要比他們高,氣度要更大。

所以,學習不是努力讀更多的書,盲目追求閱讀的速度和數量,這會讓人產生低層次的勤奮和成長的感覺,這只是在使蠻力。要思辨,要踐行,要總結和歸納,否則,只是在機械地重複某件事,而不會有質的成長的。

現在的計算機都是採用圖靈機[是一個可計算理論數學模型],包括正在設計的新的計算機,從解決問題的能力來講,都沒有超過圖靈機的範疇。圖靈機劃定了一條今天所有計算機(包括運行人工智能程序的)所能解決問題的理論極限。

記住一句話,計算的本質是:輸入 + 運算 + 輸出。

現在我們來看看,圖靈機這種數學模型到底長什麼樣子:

  1. TAPE:是一排無限長的紙帶,上面划着格子,格子只有兩種樣式,一種是裏面打了孔的(二進制的 0),一種是沒打孔的(1);這些格子和計算機的內存一樣都有編號,從 0,1,2,… ∞。

因爲紙帶是無限長的,紙帶主要是爲了存儲數據,所用的數字都放在一個個編了號的格子裏。

計算機對於數據的操作,都是先找到格子的地址,然後把那個盒子中的數據拿出來處理,處理完的內容,再放回到某個格子中。

舉個例子,假如有對夫妻。丈夫交代妻子,請她幫忙拿些茶葉。

茶葉是這樣定位的:茶葉在客廳茶几的白色盒子裏,能否拿給我。
妻子會到了客廳走到茶几前就能把盒子丟給丈夫。

可如果這對夫妻是機器人呢,那麼茶葉的定位就不一樣了。

茶葉的定位應該是這樣:茶葉在第 1 客廳,第 3 傢俱,第 5 個位置,能否拿給我。
機器人妻子也會直接拿起這個位置的東西,不管到底是茶葉,還是其他,要的就是這個編號而已,但是能拿到茶葉的。

  1. HEAD:是一個小窗口,可以順着紙帶來回的挪動,不但可以查看格子打沒打孔,還可以改變打孔與沒打孔的狀態;主要功能是讀寫數據。

  2. 狀態寄存器:作用是保存圖靈機當前的所處狀態,圖靈機的所有可能狀態是有限的。要麼是 0,要麼是 1。

  3. TABLE:是一套工作規則,能根據當前機器所處的狀態以及當前窗口(HEAD)所指的格子裏的打沒打孔來確定窗口的下一步動作,並改變狀態寄存器的值,令機器進入一個新的狀態。

可能太抽象、陌生了, 用現代的術語來看:


 


馮·諾依曼架構:內存,計算機高速運算、運行通用的祕密

在圖靈提出圖靈機的15年後,因 電子真空管 技術條件成熟和美國軍方資助,世界第一臺能用的通用計算機終於被做出來了,這就是書上的 ENIAC 。

ENIAC 是基於圖靈機實現的,設計完全基於 圖靈機,是用電子來代替紙帶的,通過控制電子來實現計算的輸入、運算和輸出。

不過,ENIAC 之所以被稱爲現代計算機的鼻祖,是因爲奠定了 “馮·諾依曼架構”。

記住一句話,計算的本質是:輸入 + 運算 + 輸出。

馮·諾依曼架構比起之前的計算機多了一個存儲的想法:

  • 程序像數據一樣混合存儲到計算機內部存儲器中
  • 把程序和數據送入計算機處理並輸出結果

簡單來說,就是指令和數據可以一起放在內存儲器裏(內存條)。

這樣 CPU 可以取數據,也可以取指令,接着一條一條的執行即可完成程序。

因爲指令和數據放在一起,因此結構簡單、工程實現簡單,才應用十分廣泛。

從前的計算機設備要怎麼設計,嚴重依賴於具體任務是什麼,不同的任務需要設計不同的結構。計算 2\sqrt{2} 是一個設計結構,計算別的又是一個設計結構,是專用計算機。

任務不同,所有電纜線就要拔掉,零件重新連接,有的時候甚至還需要改動一些電子管或者電阻纔行。

如 ENIAC 在計算時,得有十幾個計算師負責盯住機器輸出的插線板(紙板),在第 n 步、第 m 步因爲計算方式改變就需要手動換線,而 ENIAC 的真空管響應時間是 1100,0000\frac{1}{100,0000}秒,而人的反應時間、手動接線 最快也需要 1 秒。

【內存】是在步驟與步驟之間,添加和運算單元響應速度差不多的存儲單元。這裏最多可以存儲 20萬 箇中間結果,也存儲着下面將要怎麼處理的操作規則。

這樣,最大的瓶頸就消除了——針對不同的任務,直接從存儲單元裏調用不同的程序就可以了,再也不用重新接線那麼麻煩了。

引入【內存】後,計算機不止是運算速度快了,更重要的是要改造出一種不用重新接線也能計算不同任務的計算機(通用計算機)。

儲存這個機制消除了計算機的最大瓶頸,讓專用計算機變成了通用計算機,這也是 [馮·諾依曼] 被稱爲【計算機之父】的主要原因。

那有沒有點好奇呢,【內存】到底長啥樣,這麼神奇?

計算機要處理的信息是多種多樣的,如十進制數、文字、符號、圖形、音頻、視頻等,這些信息在人們的眼裏是不同的。但對於計算機來說,它們在內存中都是一樣的,都是以 二進制(0和1)的形式來表示。

內存條是一個非常精密的部件,包含了上億個電子元器件,它們很小,達到了納米級別。

這些元器件,實際上就是電路;電路的電壓會變化,要麼是 0V,要麼是 5V,只有這兩種電壓。5V 是通電,用 1 來表示,0V 是斷電,用 0 來表示。所以,一個元器件有 2 種狀態,0 或者 1。

我們通過電路來控制這些元器件的通斷電,會得到很多 0、1 的組合。

例如:

  • 8 個元器件有 28 = 256 種不同的組合
  • 16 個元器件有 216 = 65536 種不同的組合

雖然一個元器件只能表示 2 個數值,但是多個結合起來就可以表示很多數值和文字、圖像、音頻、視頻、符號等等。

一般情況下我們不一個一個的使用元器件,而是將 8 個元器件看做一個單位,即使表示很小的數,例如 1,也需要 8 個,也就是 00000001。

1 個元器件稱爲 1 比特(Bit)或 1 位,8個元器件稱爲 1 字節(Byte),那麼 16 個元器件就是 2 Byte,32 個就是 4 Byte,以此類推:

  • 8×1024個元器件就是1024Byte,簡寫爲1KB;
  • 8×1024×1024個元器件就是1024KB,簡寫爲1MB;
  • 8×1024×1024×1024個元器件就是1024MB,簡寫爲1GB。

現在您能知道 1 GB 的內存有多少個元器件了吧,我們通常所說的文件大小是多少 KB、多少 MB,就是這個意思。

如果您的電腦上安裝了QQ,希望和好友聊天,會雙擊QQ圖標,打開QQ軟件,輸入賬號和密碼,而後登錄就可以了。

那麼,QQ是怎麼運行起來的呢?

首先,有一點您要明確,您安裝的QQ軟件是保存在硬盤中的(上圖的外存儲器)。

雙擊QQ圖標,操作系統就會知道您要運行這個軟件,它會在硬盤中找到QQ軟件,將數據(軟件本質上就是很多數據的集合)複製到內存。

對!就是複製到內存!QQ不是在硬盤中運行的,而是在內存中運行的。

因爲內存的讀寫速度比硬盤快很多,機械硬盤是靠電機帶動盤片轉動來讀寫數據的,而內存條通過電路來讀寫數據,電機的轉速肯定沒有電的傳輸速度(幾乎是光速)快。

所以,不管是運行QQ還是編輯Word文檔,都是先將硬盤上的數據複製到內存,才能讓CPU來處理,這個過程就叫作載入內存(Load into Memory)。完成這個過程需要一個特殊的程序(軟件),這個程序就叫做加載器(Loader)。

CPU直接與內存打交道,它會讀取內存中的數據進行處理,並將結果保存到內存。如果需要保存到硬盤,纔會將內存中的數據複製到硬盤。

例如,打開Word文檔,輸入一些文字,雖然我們看到的不一樣了,但是硬盤中的文檔沒有改變,新增的文字暫時保存到了內存,Ctrl+S纔會保存到硬盤。因爲內存斷電後會丟失數據,所以如果您編輯完Word文檔忘記保存就關機了,那就永遠無法找回這些內容。

馮·諾依曼架構的核心就是內存,像 C 語言之所以被稱爲最貼近馮·諾依曼架構的編程語言,是因爲 C語言 簡直是爲內存而生的,它比任何一門編程語言都貼近內存。

 


摩爾定律:真實世界的指數增長

回到第一臺計算機 ENAIC 上,計算的本質是:輸入 + 運算 + 輸出。

這麼一個計算過程我們已經知道了,可如何實現呢 ?

實現它的肯定是一套物理系統,而這個物理系統的性質就會決定算力的大小了。

比如吧,第一臺計算機 ENAIC是用電子管代替了紙帶,不過,電子管實現的圖靈機:體積大、功耗高、可靠性差、每秒數千次至數萬次、價格昂貴。

只要一啓動,周圍居民家的燈都會變暗。每個電子管相當於一個小燈泡,耗電量大概是 15 萬瓦,一度電大概能完成 2.5 萬次運算。

到 2018 年,世界上最快的橡樹嶺超級計算機一秒鐘最多能完成 20 億億次浮點運算,耗電2.7度,相當於一度電完成了 7.5 億億次的運算。

自1946 年以來,計算機 70 多年的發展,從本質上講就是提高能量利用率的過程。

這 70 多年裏有三個里程碑是我們必須知道的:

  • 晶體管的誕生,ta 將計算的能耗降低了兩個數量級。這是上個世紀 50 年代的事情。
  • 集成電路的發明,ta 將計算的能耗又降低了大約兩個數量級。這是60年代初的事情。那時消耗一度電量可以完成 1 億次的運算了。
  • 1965年摩爾提出摩爾定律:即集成電路的性能每 12 個月翻一番;1975 年摩爾對摩爾定律有所修正,認爲 1980 年起集成電路的性能每兩年就會翻一番。

歷經 50 年下摩爾定律的指數增長,之前幾百萬美元的計算機,價格不斷下降直到下架…再到被歷史遺忘…

1999年,比爾·蓋茨在世界計算機展上講,如果汽車工業能夠有IT產業的發展速度,那麼一加侖(大約四升)汽油應該能讓汽車跑1000英里,而且汽車的售價只要25美元。

每過一段時間,我們就能用到更便宜、更好的產品了,這是人類有史以來最爽的事情。

小米手機就利用了這個定律,很多人都說小米手機好(手機配置好、價格便宜)。

它推出手機時採用預訂的策略,客戶看到的價格是今天的價格,開會對比手機的配置也是按照今天市場上的手機去對比的。

但是它交貨常常是半年之後,這中間有時間差,半年後由於摩爾定律的作用,那時元器件的價格其實已經不是我們今天看到的了。

因此,我們覺得我們賺了,是以今天的性價比衡量的,而我們半年後拿到同樣性價比的東西,其實那時再仔細算算,性價比就沒有那麼誘人了。

但如果站在那些製造硬件的企業角度來說,製造同一款產品,每 18 個月企業的收入就縮水一半,這可太難了,除非企業的發展能超過摩爾定律的指數增長,否則遲早關門。

像現在科技產業板塊裏的 智能設備、物聯網 都很熱門,對於這些製造硬件的企業,實在沒必要跟風,因爲受摩爾定律的影響,他們的利潤會越來越稀薄。

有人說摩爾定律快要到極限了,但這根本不叫事兒。

如果,實現計算機的物理系統不侷限於用基於硅的芯片,那計算能力最終只受到物理學的限制。

而物理學的限制是,人類理論上可能擁有的計算能力是今天的 103310^{33} 倍 —— 哪怕我們每隔幾年就把計算能力增加 11 倍,也需要 100 年的時間才能達到真正的物理極限。

小結一下,今天的傳統計算機不是萬能的,因爲被三條線給限死了,這三條線分別是:

  • 圖靈的可計算性理論,也就是圖靈機的理論
  • 馮·諾依曼的計算機系統結構
  • 半導體的物理極限

前面倆者都不太可能會有改變、突破,那麼提高計算機性能的唯一途徑即第三條。

改變實現計算過程的物理系統,而這個物理系統的性質就會決定算力的大小了。

比如,量子計算機。

傳統計算機的極限,其實就是傳統物理學的極限;那量子計算機的極限,自然就是量子力學的極限了。

 


阿姆達爾法則:如何在有限次數中做決策

阿姆達爾法則,是讓 IT 行業得以快速進步的戰術,和 阿姆達爾法則 相對應的是摩爾定律,這是 IT 行業的戰略。

阿姆達爾在設計計算機系統時,充分認識到了計算機各部分的性能必須平衡匹配,才能得到整體性能最佳的系統。

他將這種思想用一個簡單的公式描述出來:

  • 方程左邊的 S :系統最後的性能提升
  • 方程右邊的 s :某一項指標的性能提升(如內存速度提高 1 倍,s 就是 1 倍)
  • 方程右邊的 p :這項提升被用到的比例/概率(如內存的讀寫訪問,佔程序運行時間的 20%)

假設內存的速度翻一番,即 s=2,那整個計算機性能的提升是多少呢 ?

根據這個公式,可以算出是 11%,這個結果看起來還是不錯的,如果您有辦法將內存的速度提升到原來的 100 倍,那麼計算機整體速度只能提升約 25%,這看上去就不大有效了。

在每一次設計新的一代計算機產品時,都會有各種各樣的技術突破,可供選用,但是考慮到成本的因素,以及設計的複雜度,都需要有所取捨,那麼該引入哪些新技術呢 ?

阿姆達爾法則是計算機行業作決定的鐵律。

假如內存讀寫佔用程序運行時間的 20%,處理器運算佔 60%。

現在有兩個技術,一個可以將內存讀寫速度提高 5 倍,另一個可以將處理器的速度提升 50%,由於成本的限制和研發時間的限制,下一個版本只能採用一項改進,應該選用哪個 ?

20% 的 5 倍,好像效果顯著;而 60% 的 50%,也就 30%,所以當然應該採用新的內存技術。

阿姆達爾法則給出的結論,則恰恰相反 ---- 根據上述公式,提高內存的性能,計算機整體的性能只能提高20%( 1/[(1-0.2)+0.2/6]≈120% ),如果提高處理器的性能,系統整體的性能能夠提高 25%( 1/[(1-0.6)+0.6/1.5] = 125% )。

接下來,如果一年後還要再推出一個新的系統,假定處理器和內存的性能提升的可能性和成本跟上一次相當,這回該改進計算機處理器,還是內存呢?

還是該改進處理器,很遺憾,這一次該改進內存了。

因爲上一次處理器改進後,處理器運算佔用的時間比例,也就是公式中的 p,就從 60% 下降到 50% 了,再改進處理器,油水就沒有那麼大了。

事實上,如果繼續改進處理器,可以得到 20% 左右的性能提升,而改進內存這回能獲得 25% 的性能提升。

不僅在計算機設計中阿姆達爾法則是鐵律,在軟件開發,調試軟件性能時,負責任的工程師都要用這個鐵律將能夠提升明顯性能的模塊都優化一遍。

在大型的計算機軟件開發中,有一個叫做 Profile 的工具,可以模擬出軟件中每一個功能模塊佔用資源的情況,這樣把最佔用資源的模塊進行優化,很容易成倍提高性能。

阿姆達爾法則不僅是產品設計中選擇技術的準則,更是整個計算機行業裏決定研發投入依據的原則,也就是說,當前如果計算機系統中的哪個部分成爲了拖後腿的瓶頸,就必須集中精力和經費解決相應的問題,這也就解釋了爲什麼IT的關鍵技術似乎都在合適的時間獲得突破的原因。

很多時候,我們都面臨在限制要素中作選擇的問題。

很多時候,我們總想全方位改進自己,但是人的精力和資源有限,因此在某一時刻,可能只能向一個方向努力。

很多人從直覺出發,覺得該補短板,另一些人則覺得,該把長板變得更長。

第一類人講木桶理論,第二類人講長板理論,每一類都有很多成功的例子,也有很多失敗的教訓。

於是很多人就不知道該用哪一個理論了。

事實上您今天學了阿姆達爾法則後,就很容易作決斷了,那就是在任何時刻算出 S,而後選收益最大的路徑前進就好。

 


覆盤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章