1. 程式人生 > >NVIDIA CUDA初級教程視訊 - 學習筆記(一)CPU體系架構概述

NVIDIA CUDA初級教程視訊 - 學習筆記(一)CPU體系架構概述

一句話:CPU大量用於資料搬運而非數值運算,用流水線和分支提高效率

周斌老師:NVIDIA CUDA初級教程視訊第2集

【計算機組成原理】

Q:什麼是CPU?
A:是執行指令、處理資料的器件,用於完成基本的邏輯和算術指令,現在增加了複雜功能(記憶體介面、外部裝置介面),包含大量電晶體(上百億)

Q:什麼是指令?
A:包括算術、訪存、控制。對於一個編譯好的程式,最優化目標:CPI(每條指令所需時鐘週期:cycles/instruction)× 時鐘週期(seconds/cycle)。這兩個指標彼此並不獨立

桌面應用多為輕量級程序,少量執行緒,有大量分支和互動操作,需要大量的儲存器訪問

,而真正用於數值運算的指令很少(大量用於搬運資料,於是CPU不是計算機,而是是吞吐機、儲存機)

摩爾定律:晶片的整合密度每2年翻一翻,且成本下降一半。但目前矽基晶片達到物理極限(量子效應明顯)


流水線 Pipeline

  • 利用指令級並行,極大的減小時鐘週期,同時增加一些延遲和芯片面積
  • 帶來處理具有依賴關係指令和分支處理的問題
  • 流水線長度(流水線分級):級數多不一定能帶來效能提升

旁路 Bypassing

  • (開後門)處理具有依賴關係的指令

停滯 Stalls

分支 Branches

  • 等待判斷條件,要不要執行

分支預測 Branch Prediction

  • 基於過去的分支記錄,猜測下一條指令
  • 現代預測器準確度大於90%。提升效能及能量效率,面積增加,可能會增加延遲(猜也需要時間)

分支斷定 Another option: Predication

  • 不使用分支預測器,用條件語句替換分支(所有分支都做)
  • 在GPU中使用分支斷定

提升 IPC

  • 常規 IPC (instructions/cycle) 受限於 1 instruction / clock
  • 超標量 (Superscalar) – 增加流水線寬度(類似於三頭六臂,為了處理更多的資料)
  • N倍資源使用,旁路網路N^2,需要更多的暫存器和儲存器頻寬(但三頭六臂吃的飯也多了,需要的床也大了)

指令排程 Scheduling :

  • 指令直接是否依賴

暫存器重新命名 Register Renaming

  • 替換暫存器,讓指令可以並行執行

亂序執行 Out-of-Order(OoO) Execution 

  • 重排指令,獲得最大的吞吐率:Fetch → Decode → Rename → Dispatch → Issue → Register-Read → Execute → Memory → Writeback → Commit (調節順序,用更合理的順序做事情)
  • 重排緩衝區Reorder Buffer (ROB):記錄所有執行中的指令狀態
  • 發射佇列/排程器Issue Queue/Scheduler:選擇下一條執行的指令

快取 Caching

  • 將資料放在儘可能接近的位置(手機放在口袋裡,而不是放包裡)
  • 利用時間臨近性(剛剛使用過的資料很可能會被再使用)和空間臨近性(傾向於使用周圍的臨近的資料)

CPU內部的並行性

  • 指令級並行 Instruction-Level (ILP) extraction :超標量Superscalar亂序執行Out-of-order(OoO
  • 資料級並行 Data-Level Parallelism (DLP) :向量計算Vectors (資料間沒有相關性,可以同時運算)
  • 執行緒級並行 Thread-Level Parallelism (TLP) :同步多執行緒Simultaneous Multithreading (SMT) 、多核 Multicore

鎖、一致性、同一性  Locks,Coherence,Consistency

  • 多執行緒讀寫同一塊資料?加(我用完了再把鎖給你,你來用)
  • 誰的資料是正確的 (Coherence)? 快取一致性協議
  • 什麼樣的資料是正確的 (Consistency)?儲存器同一性模型

現實的困境

  • 能量牆: Power Wall(拿掉散熱器片,晶片煎雞蛋)
  • 儲存器牆:處理器的儲存器頻寬無法滿足處理能力的提升

結論

  • CPU 為序列程式優化

Pipelines, branch prediction, superscalar, OoO

Reduce execution time with high clock speeds and high utilization

  • 緩慢的記憶體頻寬(儲存器頻寬)將會是大問題
  • 並行處理是方向