只是把當初做筆記的部分, 貼到這邊來.

就好像在自我探索一樣...

基本上都是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位元.

創作者介紹
創作者 紀錄, 記東記西 的頭像
H.j. Yao

紀錄, 記東記西

H.j. Yao 發表在 痞客邦 留言(0) 人氣( 422 )