基礎知識:
1、計算機體系結構基礎
2、C語言程序設計
3、計算機算啊基礎
4、線性代數
https://developer.nvidia.com/computeworks NAIDIA CUDA Zone
一、CPU體系架構概述
1、什麼是CPU?
大多馮諾依曼體系結構,執行指令,處理數據的器件、增加了複雜功能、包含大量晶體管。
指令舉例:
算術:add r3,r4 ->r4
訪存:load [r4] -> r7
控制: jz cnd(如果是0,跳轉)
對於一個編譯好的程序,最優化目標:
每個指令需要的幾個時鐘週期*每個時鐘週期所用的時間
兩條線:數據線,指令線。
CPU一條指令爲一個基本的操作單元,最常用指令MAC,乘加指令,a= b*c+d
流水線、亂序執行
寄存器reg,算術邏輯單元ALU,L1一級緩存,L2二級緩存,RAM,硬盤。
桌面應用
1、少量線程 一段指令代碼,無存儲空間 輕量級進程
2、大量分支交互操作
3、大量存儲器訪問
指令集並行,流水線極大地減少時鐘週期 問題:有依賴性關係的指令 現在大概都是十幾級
旁路可以解決相互依賴的問題,不需要寫入memory。
流水線分支預測:猜測下一條指令、基於過去的分支記錄
分支預測器增加了面積。
分支斷定:用條件語句替換分支
CPI越小小號,ICP越大越好
ADD R0,R1->R2
ADD_V (R0,R1,R2......R7)->
峯值IPC爲N
OoO可以使IPC接近理想
延遲是第一個數據來到第一個數據出,吞吐是單位時間內可以同時多少
SRAM 6個晶體管可以搭起來、DRAM斷電消失
Caching緩存 數據放在儘可能近的位置
存儲器設計:
分區(Banking)避免多端口、一致性、控制器多通道,增加帶寬
線程:指令流+私有的寄存器,程序計數器、棧(先進先出)+共享全局變量、堆