計算機組成原理 04 如何提公升「效能」

2022-07-11 08:21:10 字數 3119 閱讀 7849

程式的 cpu 執行時間 = 指令數 × cpi × clock cycle time

由此可知,想提公升計算機效能,可以從指令數、cpi、cpu 主頻三個方向入手。搞定指令數需要優化編譯器,搞定 cpi 則需要優化 cpu 架構,譬如採用流水線技術。所以研發 cpu 的硬體工程師們將目光聚焦在了主頻上——多放些電晶體、提高 cpu 的時鐘頻率,就可以讓 cpu 更快,程式的執行時間更短。

1978 年發布的 8086 cpu,主頻只有 5mhz。1989 年的 486 就提公升到了 100mhz。2000 年的奔騰 4 處理器,更是達到了 1.4ghz。intel 也是放出豪言壯語,稱奔騰 4 使用的 cpu 結構可以做到 10ghz。

看起來,提高效能的康莊大道已然擺在面前。但提公升主頻真的是無往而不利的手段嗎?

和 intel 的預期不同,奔騰 4 的 cpu 主頻從來沒有達到過 10ghz,並且最終將上限定格在 3.8ghz。此外,在實際應用中發現,奔騰 4 的主頻雖然高,但並沒有顯著提公升效能。奔騰 4 系列的 2.4ghz 處理器,效能和奔騰 3 架構的奔騰 m 1.6ghz 處理器相近。這一事件代表著「主頻時代」的終結,intel 接下來的幾代產品,主頻不公升反降。2019 年最強的 i9 cpu,主頻也不過 5ghz。

cpu 主頻提公升,從奔騰 4 時代進入瓶頸期

奔騰 4 之所以沒有超過 3.8ghz 的瓶頸,是因為功耗問題。主頻為 3.8ghz 的奔騰 4 處理器,滿載功率是 130w。作為對比,iphone x 使用的 cpu,功率僅 4.5w。

前文提到,cpu 是乙個超大規模積體電路,本質上是由乙個個電晶體組合而成的。cpu 的運算過程,就是讓這些電晶體裡的「開關」不斷開啟和關閉實現的。想要運算快,無非兩個手段。一是在相同的面積裡,多放一些電晶體,即增加密度。另乙個就是讓電晶體開啟和關閉的速度更快,也就是提公升主頻。這兩種手段都會增加功耗,帶來耗電和散熱的問題。我們在 cpu 上面抹矽脂、裝風扇,乃至用上水冷或者其他更好的散熱裝置,但散熱效果也是有極限的。綜上,cpu 裡能放的電晶體數量和電晶體的開關頻率也都是有極限的。

乙個 cpu 的功率,可以用如下公式表示:

功耗 ~= 1/2 × 負載電容 × 電壓的平方 × 開關頻率 × 電晶體數量

為了提公升效能,我們要盡力在相同面積下多放一些電晶體。這就要把電晶體造得小一些,也就是我們平時說的「製程」。從 28nm 到 7nm,電晶體大小變成了原來的 1/4。此外,還要提公升主頻,讓電晶體的開關頻率更快。

cpu 製程的演進

前面也提到,這兩種手段會導致功耗增加,而功耗增加又會導致 cpu 散熱跟不上。研發 cpu 的工程師又想出乙個辦法——降低電壓。從上面的公式可知,功耗和電壓的平方成正比。電壓下降到原來的 1/5,功耗會降低到原來的 1/25。

從 5mhz 主頻的 8086 到 5ghz 主頻的 intel i9,cpu 的電壓已經從 5v 左右下降到了 1v 左右。這也是為什麼我們 cpu 的主頻提公升了 1000 倍,但是功耗只增長了 40 倍。

製程的優化和電壓的下降,在過去的 20 年裡,讓我們的 cpu 效能有所提公升。但從奔騰 4 開始,intel 意識到通過提公升主頻已經難以實現效能提公升,於是開始推出 core duo 這樣的多核 cpu,通過提公升「吞吐率」而不是「響應時間」,來達到目的。簡而言之,就是通過並行提高效能。

舉個栗子。我有一批貨,要從北京運到上海。公路運輸要 20 小時,航空運輸則只要 2 小時。但沒有辦法再縮短時間了——總不能用東風快遞打過去吧。那麼假設我的貨物,一架飛機要飛八次才能運完,那麼我找八架飛機送,一次就能送完了。

通過並行提高效能的思想已經被廣泛使用。譬如機器學習要計算向量的點積,就是讓多個 cpu 各自做部分運算,最後再彙總,從而縮短時間。

在點積運算中通過並行提公升效能

並非所有問題都能通過並行提高效能來解決。使用並行思想,需要滿足以下三個條件:

阿姆達爾定律是效能優化中常用的經驗定律。它說的是,對於乙個程式進行優化之後,處理器並行運算之後效率提公升的情況。具體可以用這樣乙個公式來表示:

優化後的執行時間 = 受優化影響的執行時間 / 加速倍數 + 不受影響的執行時間

在上一小結的點積運算例項中,4 個 cpu 同時計算向量的一小段點積,通過並行提高了這部分的計算效能。但這 4 個結果還是要在 1 個 cpu 進行彙總,這個環節是不能用並行來優化的,也就是上述公式中「不受影響的執行時間」。

譬如上面的各個向量的一小段的點積,需要 100ns,加法需要 20ns,總共需要 120ns。這裡通過並行 4 個 cpu 有了 4 倍的加速度。那麼最終優化後,就有了 100/4+20=45ns。即使我們增加更多的並行度來提供加速倍數,比如有 100 個 cpu,整個時間也需要 100/100+20=21ns。

阿姆達爾定律在點積運算中的應用示例

通過前兩個小節的描述可以看到,暴力提公升主頻、增加 cpu 核心數,並行提公升效能這兩種方式都有各自的瓶頸。單純堆砌硬體已經不能很好地提公升效能。於是工程師們又開始思考新的途徑。

目前,在計算機組成層面,還有幾個原則性的效能提公升方法。

深度學習的整個計算過程中,99% 都是向量和矩陣計算。於是,工程師們通過用 gpu 替代 cpu,大幅度提公升了深度學習的模型訓練過程。本來乙個 cpu 需要跑幾小時甚至幾天的程式,gpu 只需要幾分鐘就好了。google 更是不滿足於 gpu 的效能,進一步地推出了 tpu。

將 cpu 指令的執行過程進行拆分,細化執行。這也是現代 cpu 在主頻沒有辦法提公升那麼多的情況下,效能仍然可以得到提公升的重要原因之一。

預先猜測下一步該幹什麼,提前進行運算,而非等待上一步執行的結果。典型的例子就是在乙個迴圈訪問陣列的時候,憑經驗,你也會猜到下一步我們會訪問陣列的下一項。「分支和冒險」、「區域性性原理」這些 cpu 和儲存系統設計方法,其實都是在利用我們對於未來的「**」,提前進行相應的操作,來提公升我們的程式效能。

計算機組成原理cu 計算機組成原理 計算機概論

現代計算機樣式千奇百怪,常見的有我們的筆記本,台式電腦,也有各種伺服器 手機 攝像頭等都屬於計算機範疇。計算機包含我們看得見摸得著的計算機實體,稱為計算機硬體,如cpu 記憶體 各種掛接裝置等 還有我們看不見摸不著的軟體,它支援著硬體按照我們的預想在操作,包括系統軟體和應用軟體 計算機硬體樣式千奇百...

計算機組成原理 04 計算機的計算單位

位元組 1byte 8bits 理論上只認識0 1兩種狀態 在物理層面,高低電平記錄資訊 0 1能夠表示的內容太少了,需要更大的容量表示方法 1g記憶體,可以儲存多少位元組的資料?可以儲存多少位元資料?1g 1024 3bytes 1024 3 8bits 1 網路速度 網路常用單位為 mbps 1...

計算機組成原理

1計算機系統概論 1.1 計算機簡介 計算機由 硬體 和 軟體 組成。硬體 是看得見摸得著的各種電子元器件,各類光,電,機裝置的實物組成,如主機,外設等等。軟體 是看不見摸不著,由人們事先編製成具有各類特殊功能的資訊組成。計算機的三層結構 高階語言 組合語言 機器語言 微指令系統。計算機組成與計算機...