只是把當初做筆記的部分, 貼到這邊來.
就好像在自我探索一樣...
基本上都是wiki上面所了解. 過於額外的東西.
----------------------------------------------------
1. 增加ILP效能的技術與相關解釋:
1. ILP - Instruction-level paralleliism
一個時間單位內能同步執行的指令數量, 當然是越高越好
舉例: 1. e=a+b 2. f=a+d 3. m=e*f
1跟2可以同時執行, 然而3有依賴性, 故一時間單位內可執行兩個指令,
寫作an ILP of 3/2
2. Instruction Pipelining
設計於電腦中增加指令吞吐率(一時間單位內可被執行的指令數量)的技術
理念: 不同於按序處理每一個指令(即處理完整個指令再處理下一個)
一條指令, 將其分成好幾個步驟, 這些步驟可同時執行(透過不同電路)
即所謂平行(同時間)
而將這樣基本的指令周期打散進到一個序列稱做管線
注意: 所謂指令與步驟, 即是:
指令, 像是e=a+b, 這樣的表現方式, 但是
實際步驟就可以分成下面, 假設, 5種,
LOAD A, R1
LOAD B, R2
ADD R1, R2, R3
STORE R3, C
LOAD next instruction
實作: 在管線化處理器, 會有個管線控制器將此指令分拆成這些微指令(步驟)
透過電路規劃, 通過多個硬體處理單元.
優缺: 正常來說能提高處理器速度.
但缺點是, 若兩指令間互有依賴關係, 則可能有流水衝突(無英譯),
可分成三種, 各衝突可用不同方式解決:
1. 資源衝突: 流水線上某指令需要用到正被另一指令占用的資源.
Sol: 增加功能單位
2. 數據衝突: 指令層的數據衝突 - 某指令需要的數據還沒算出來
傳輸層的數據衝突 - 某指令需要的暫存器內容還沒調入暫存器
Sol: 加速傳輸流水線後面的計算結果.
3. 控制流衝突: 流水線必須等一個有條件Goto指令是否會被執行.
Sol: 分支預測器
而綜合起來, 流水線的缺點是,
假設分支預策錯誤, 則所有整個流水線上的指令都要被取消,
流水線要重新再被填滿, 需要在從內存或CPU cache中調用指令,
這段空閒, 處理器沒有工作.
故, 流水線越多層反而會放大缺點, 故有CPU架構其後減少管線級數
3. Superscalar CPU Architecture
超純量就是在一處理器裡實作ILP的一種CPU架構. 故能有更快的CPU吞吐率.
理念: 同步分派許多指令到redundant(自想:即複數個相同單位)功能單元.
每個功能單元並非CPU核心, 而是在單一CPU裡的一執行資源如ALU, bit shifter, 或乘法器
英文wiki中有再細部區分, 單核超純量處理器是為SISD處理器, 而多核則是為MIMD.
實作: 超純量處理器 = 純量處理器(一時間內1指令操作1或2個資料項目) + 向量處理器 (...許多個資料項目)
*向量處理器 = 實作了"含有可操作一維數組資料(即向量)指令"的指令集在裏頭的處理器.
*純量處理器 = 上述敘述反之就是純量處理器.
**上述提到指令集如VIS, MMX, SSE等等, 乃是如此.
差別: 就我個人認知, 雖超純量與管線化理念很相同, 但是否, 差別是在細度?
管線化是將指令分成許多步驟放進管線中執行
超純量是將多個指令分派到各個功能單元
*3/6 4:48pm補充: 就像是下面"注意"提到的, 每個核心有多個平行管線, 每個管線是超純量.
限制: 1.指令流中的本質並行度(degrees of intrinsic parallelism),也就是限制ILP的數量。
2.複雜又耗時的調度器的消耗時間與依賴性檢查邏輯電路。
3.分支指令的處理
替代: 前兩者限制驅使研究其他效能增進架構, 如VLIW, EPIC, SMT, 多核處理器.
VLIW = 將繁重的指令相依性檢查工作由運行時的硬體邏輯轉移到編譯器上.
EPIC = 同上述, 多了快取預取指令. (中文wiki說的)
SMT = 為改進超純量的總體效率, 允許多個獨立的執行緒來更加利用現代處理器架構資源.
多核處理器 = 超純量是有多餘的功能單元, 但無法構成完整的處理器; 後者是.
多核利用多執行緒來做同步處理指令.
注意: 並非技術互斥, 也可(經常)合併使用到一處理器上.
如一多核處理器, 每個核心有多個平行管線, 每個管線是超純量, 有些還能作向量處理.
-------------------------------------------------------------------
Intel 早期處理器統整
1. x86 (不深入了)
一種可向下相容的指令集架構.
起源: 最早應用於Intel 8086這個CPU, 也是該架構的開端
早期處理器皆以數字來稱呼, 且皆為86結尾, 8086 80186 80286 80386 80486
而後, 應數字不能做為商標, 所有廠商都可用, 故Intel則在新一代取名Pentium
其他競爭廠商也是如此.
定義: 雖然目前普遍泛指32位元的處理器, x86等於是IA-32
但實際上包含了16位元的處理器, 8086, 80186, 80286.
稱做32位元, 或稱作16位元, 是以甚麼為根據? (不太會敘述)
以處理器內所能處理的最大的資料寬度為主
舉例來說, 一個32位元的處理器, 如Pentium Pro
它外部的位址匯流排是36位元, 外部資料匯流排是64位元
但實際執行上, 還是會以內部暫存器所能執行的長度來決定
2. x86-64
有時簡稱為x64, 可以說是一種64位元微架構的稱呼, 或是指指令集的稱呼.
起源: 1999年, AMD首次公開64位元指令集, 應用到x86(IA-32)來做擴充.
後來稱做AMD64; Intel而後才跟進, 稱做IA-32E, 或EM64T, 或Intel64
但不去在意稱呼, 這兩者都是x86-64
內容: 支援64位元通用暫存器、64位元整數及邏輯運算,以及64位元虛擬位址...
新增暫存器 位址闊度加長 SSE2、SSE3指令 「禁止執行」位元 (NX-bit)...
*Intel 4004
10um, 740KHz, 16-pin DIP, IS: 4-bit BCD-oriented
1971年11/15, 第一款微處理器.
尺寸是3mm x 4mm, 內有2300電晶體
主頻是108KHz, 最高有740KHz, 能執行4位元運算, 支援8位元指令集跟12位元指令集...
*Intel 8008
10um製程, 0.2MHz ~ 0.8MHz, 18 pin DIP, IS: 8008.
1972年, 第一款8-bit處理器; 可支援到16KB的記憶體
有18個引腳(針腳). 雖然比4004工作時脈慢, 但因為是8-bit處理器, 整體效能比4004好上許多.
用的是Datapoint這家公司設計的指令集.
當中C8008是紫色陶瓷鍍金接腳版本, D8008則是後期出的量產版
*Intel 8080
6um製程, 2MHz, 40 pin DIP.
1974年4月發行, 被公認是第一款真正可用的微處理器.
時脈2MHz. 向前相容8008指令集
*Intel 8085
3um製程, 3.5MHz 跟 6MHz, 40 pin DIP(dual in-line package, 雙列直插封裝)
1970s中期發展的8-bit處理器, 向前相容8080, 但硬體支援需求較低
故製造商可生產出更便宜簡單的電腦系統
(數字是5的原因是因為8085只需要一個+5V的電源供應
(比起8080需要+5V, -5V, +12V)
*Intel 8086,
3um製程, 5MHz ~ 10MHz, IS: x86-16, 40pin DIP
1976年5月開始設計, 1978年年中發行的第一款16位元微處理器.
因採用與8085近似結構與工藝, 進展快速.
指令集與編程是基於8080微處理器, 但指令集做了擴充功能以完全支援16位元計算.
*此晶片是微碼(之前提到的Microcode)跟邏輯電路的混合實作
使用了約20,000個電晶體(算上所有ROM與PLA, 為29,000個), 晶片面積是33mm^2
製造工藝是3.2um
*因所有內部暫存器, 內部及外部資料匯流排都是16位元寬, 所以是完全的16位元微處理器.
有20位的外部位置匯流排, 故物理定位空間是1MiB(就是2^20)
因內部暫存器是16-bit, 故對1M位址空間定址時採取段定址方式(未深入)
40pin DIP, 資料匯流排與位置匯流排復用了前16個dip.
16位元的I/O位址, 因此獨立的I/O定址空間是64KiB (2^16=65536) (中文wiki寫錯)
內部暫存器是16-bit, 故最大線性定址空間是64KB,
若使用超過64KiB記憶體空間的程式設計, 需要調整段暫存器(segment registers)
在80386出現前, 這個段定址很不方便
*主暫存器AX(primary, 累進器), BX(Base, 累進器), CX(計數器, 累進器), DX(累進器, 其他功能)
索引暫存器SI(來源索引), DI(目的索引), BP(基本指向器), SP(堆疊指向器);
標誌暫存器FLAGS - 共16-bit, 當中9個位元被使用, 其他七個保留未用.
段暫存器CS(Code段), DS(資料段), ES(額外段), SS(堆疊段)
指令指向器IP
*8086指令集的設計大大提高代碼密度(code density) (未深入)
*共有256個中斷
*記憶體分段, 在Intel 8位元或16位元處理器中, 因暫存器寬度是8或16位元
而位址匯流排寬度一般大於暫存器, 而為了能存取整個位址空間, 須採取特殊的定址計算
即分段定址. 而80386開始的32位元微處理器, 位址匯流排與暫存器皆是32位元,
故可視為扁平(flat)定址空間, 不再需要分段定址.
分段定址, 指一個實體位址, 透過段位址(segment selector)與偏移量(offset)兩者組成
長度各是16位元. 在計算時, 要先將段位址左移4位元(即多一位)再加上offset才是結果
舉例:06EFh:1234h
前者就是段位址, 偏移量1234h, 故實體位址06EF0h + 1234h = 08124h ...
*前面提到有20根位址匯流排引腳, 因此實體記憶體空間最大是1MiB, 因還包括IO記憶體
故使用8086的電腦的主記憶體容量少於1MiB, 常見是640KiB.
*因x86指令集的向前相容的特色, x86處理器也都是這樣的定址空間的特性, 稱作真實模式
*而80286使用了24位元寬位址匯流排的16位元微處理器
如要完整使用到2^24=16MiB的定址空間, 則須轉換到保護模式, 根據A20開啟與否來決定.
*Intel 8088
5MHz~ 10MHz, IS: x86(IA-16), 封裝: 40-pin DIP or 44-pin PLCC
以8086為基礎而製作的微處理器, 但不同8086, 外部資料匯流排是8位元寬度
為此, 是針對較為經濟之系統(不深入)
*Intel 80186
6MHz~25MHz; 封裝很多種- 68-pin PLCC or 100-pin PQFP or 68-pin PGA
1982年針對工業控制/通訊等嵌入式市場而推出的CPU.
以8086為基礎再做擴充, 一樣是16-bit外部資料匯流排,跟20-bit位址匯流排
另外包括中斷控制器、定時器、DMA、I/O、UART、片選電路等外設
*Intel 80188
80186的變化型, 使用8-bit外部資料匯流排取代原有的16-bit,
讓連接到周邊裝置的費用減低.
16-bit的暫存器跟1MB定址範圍並沒有改變. 每秒有一百萬個指令的吞吐率.
80188系列偏向嵌入式系統, 像是對外部記憶體的微控制器.
因此為了減少其他晶片的需求, 它包含了許多功能像是, clock generator
中斷控制器, 計時器, wait state generator, DMA channel, external chip selct lines.
最初時脈是6MHz, 但隨著更多硬體可用於microcode, 特別是計算位址
許多個別指令在同樣時脈下運作的比在8086下還快. (不深入)
*Intel 80286
常見製造商: Intel, IBM, AMD, Harris, Siemens AG, Fujitsu
6MHz~25MHz, IS: x86-16(with MMU); 68-pin PLCC or 100-pin PQFP or 68-pin PGA
1982年2月1號發布, 有134,000個電晶體的16-bit x86微處理器.
在1984年使用在IBM PC/AT, 直到1990s早期被廣泛的使用在大多PC/AT相容的電腦上.
此款是第一個有記憶體管理及廣泛保護功能的x86微處理器.
平均80286有著每週期0.21指令的速度.
6MHz系列的可運作0.9MIPS(每秒百萬個指令),10MHz有1.5MHz, 12MHz有2.66MIPS.
計算位址的耗費比8086便宜.
8086必須使用ALU來做有效位址計算導致clock penalty,
而80286則使用複雜算數操作(如MUL/DIV)
286有24-bit位址匯流排, 因此可定址16MB的RAM
保護模式:
透過MMU可定址到16MB(這不深入)
*x87
x86架構指令集中, 跟浮點相關的的子集
*Intel 80386
12MHz ~ 40MHz, IS: x86(IA-32), 132-pin PGA or 132-pin PQFP ...
1985年引進, 也稱做Intel386, i386, 386, 第一個版本有275,000個電晶體
33MHz的386運行約11.4 MIPS.
80386DX的內部與外部資料匯流排及位址匯流排都是32位元, 故可定址到4G記憶體
80386有三種工作模式, 真實模式, 保護模式, 以及虛擬86模式.
80386SX是廉價版本, 外部匯流排是16位元, 位址匯流排是24位元.
請先 登入 以發表留言。