計算機速成課 第九集 高級CPU設計

1. 早期計算機提速方式

  • 減少晶體管的切換時間,但是最終會遇到瓶頸,所以芯片廠商發明各種新技術來提升性能
  • 這樣使得運算更快,也可以處理更復雜的任務

2. 早起使用減法來實現除法的功能效率低

  • 例如:16/4,會執行爲 16-4-4-4,碰到 0 或者負數才停下
  • 但是這種方法需要多個時鐘週期,很低效
  • 現代 CPU 直接在硬件層面設計了除法,可以直接給 ALU 除法指令

3. 指令數量不斷增加

  • 人們習慣了它的便利就很難刪掉,所以爲了兼容舊指令集,指令數量越來越多
  • 英特爾 4004,第一個集成 CPU,有 46 條指令,但是現代處理器有上千條指令,有各種巧妙複雜的電路
  • 超高的時鐘速度帶來另外一個問題:如何快速傳遞數據給 CPU ?

4. 快速傳遞數據給 CPU

  • RAM 是 CPU 之外的獨立組件,意味着數據要用線來傳遞,叫「總線」
  • 電信號的傳輸接近光速,但 CPU 每秒可以處理上億條指令,很小的延遲也會造成問題
  • RAM 需要時間找地址、取數據、配置、輸出數據,一條「從內存讀數據」的指令可能要多個時鐘週期,CPU 空等數據
  • 提升性能的解決的方法之一是給 CPU 加點 RAM,叫「緩存」
    • 緩存離 CPU 近,一個時鐘週期就能給數據,所以 CPU 不用空等,比反覆去 RAM 拿數據快的多
    • 如果想要的數據已經在緩存,叫「緩存命中」
    • 如果想要的數據不在緩存,叫「緩存未命中」
    • 緩存也可以當臨時空間,存一些中間值,適合長/複雜的運算
  • 緩存裏每塊共建,有一個特殊的標記,叫「髒位」
    • 同步一般發生在當緩存滿了而 CPU 又要緩存時,在清理緩存騰出空間之前,會先檢查「髒位」
    • 如果是「髒」的,在加載新內容之前,會把數據寫回 RAM
  • 提升性能的解決的方法之二是「指令流水線」
    • 使用「並行處理」進一步提高效率,即「執行」一個指令時,同時「解碼」下一個指令,「讀取」下個指令,不同任務重疊執行,同時用上 CPU 裏所有部分
    • 帶來的問題:
      • 指令之間的依賴關係。例如:你在讀某個數據,而正在執行的指令會修改這個數據,也就是說拿到的是舊數據,因此流水線處理器,要先弄清數據依賴性,必要時停止流水線,避免出問題
      • 「亂序執行」高端 CPU,比如筆記本和手機裏那種,會更進一步,動態排序有依賴關係的指令,最小化流水線的停工時間,這叫亂序執行。
      • 「條件跳轉」,這些指令會改變程序的執行流
      • 「推測執行」高端 CPU 會猜哪條路的可能性大一些,然後提前把指令放進流水線
      • 「分支預測」爲了儘可能減少清空流水線的次數,CPU 廠商開發了複雜的方法,來猜測那條分支更有可能。
  • 提升性能的解決的方法之三是「同時運行多個指令流」
    • 使用多核處理器
    • 超級計算機
      • 如果要做怪獸級運算,比如模擬宇宙形成,則需要更強大的計算能力
      • 世界上最快的計算機在中國無錫的國家超算中心
        • 神威·太湖之光有 40960 個 CPU,每個 CPU 有 256 個核心
        • 總共超過1千萬個核心,每個核心的頻率時 1.45GHz
        • 每秒可以進行 9.3 億億次浮點數運算,也叫「每秒浮點運算次數」

5. 總結

  • 這些年處理器不但大大提高了速度,而且變得更復雜,用各種技巧,榨乾每個時鐘週期,做盡可能多的運算
  • 我們的人物是利用這些運算能離,做又酷又實用的事,編程就是爲了這個
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章