80686-Pentium Pro

SMP對稱多處理器

Pentium Pro開始支持SMP,即在一個機器上使用多個CPU。多路CPU的實現方式主要有兩種,一種稱為SMP,即對稱多處理器,另一個為NUMA,即Non-Uniform Memory Acess。在SMP系統中,多個CPU平等一致地訪問匯流排、外設、內存等資源,各 CPU 共享相同的物理內存,每個 CPU 訪問內存中的任何地址所需時間是相同的,也稱為UMA。

SMP的設計較為複雜,多個處理器共享匯流排等資源在CPU個數較少的時候不是什麼問題,但在CPU個數較多時,對匯流排帶寬,匯流排一致性等都提出的較大的挑戰,因為在更多的CPU中,通常採用NUMA架構。在NUMA架構中,每個CPU有各自的內存,一個CPU也可以訪問其他CPU上的內存,但是訪問速度相對較慢。這個特性會被操作系統感知,操作系統在分配內存和計算任務時,盡量將內存和計算任務分配在臨近的CPU和內存上。

對稱多處理器系統架構圖

NUMA系統架構圖

Cache的變化

在80486中,Intel將L1 cache放進了CPU,到了80686(其實沒有這個叫法了)也就是pentium Pro,Intel將L2 cache也放進了CPU。並且在L1 Cache中將數據和指令分開,即一個8KB的數據Cache, 一個8KB的指令Cache。

將數據和指令分別存取的存取結構叫做哈佛結構,區別於混在一起的馮·諾伊曼結構。

哈佛結構是一種將程序指令存儲和數據存儲分開的存儲器結構。哈佛結構是一種並行體系結構,它的主要特點是將程序和數據存儲在不同的存儲空間中,即程序存儲器和數據存儲器是兩個獨立的存儲器,每個存儲器獨立編址、獨立訪問。n--百度百科n

當然,在CPU外面,DRAM內存還是那麼一套內存,硬碟也是那麼一套不區分指令和數據的硬碟。因而可以說x86 CPU是在內部採用哈佛結構、外部仍然是馮·諾伊曼結構。 實際上除了少數單片機、DSP等設備,誰也不會最外層的存儲設備都區分數據和指令。所以這種內部哈佛,外部馮·諾伊曼結構的做法似乎已經成了業界共識。

DIB結構

即L2 Cache與DRAM(即我們常說的內存)匯流排並行,在以前的系統中,包括僅有L1 Cache的系統和有外部L2 Cache的系統。數據的獲取都是串列的,即先是L1 Cache中取數據,miss後去L2 Cache中取,如果L2 Cache依然miss,則去DRAM中取數據。

由於L2 Cache相對L2 Cache比較慢,相對於DRAM取數據的時延來講,L1 Cache miss的時延還可以忽略,L2 Cache miss的時延就不能那麼簡單的忽略了。

為了降低L2 Cache miss對總的訪存時延的影響,在L1 Cache miss時,直接將訪存的地址同時發給L2 Cache控制器和DRAM內存控制器。如果L2 Cache hit,則直接採用L2 Cache中的結果,如果L2 Cache miss,則等待DRAM中的訪存結果。這樣就降低了L2 Cache miss時的訪存的整體時間。當然這也有一個問題,就是L2 Cache hit的時候,多做了一次無謂的DRAM訪存操作,增加了內存匯流排的壓力。

下面的圖片中可以看出,DRAM和L2 Cache的採用並列的方式同時對接匯流排介面單元BIU。

ILP=3的指令級並行

在上一篇文章 80586-初代奔騰的超標量 中,講到初代奔騰支持同時取指、解碼、執行、回寫兩條指令,即有兩條流水線,兩個ALU,可最多同時執行兩個互相沒有數據依賴的指令,這種做法稱為指令級並行(ILP, Instruction Level Paralism),在Pentium Pro中,有三條這樣的流水線,可以最多同時執行三條指令。

12級流水線

上面圖中的紅字表示的流水線中的三個單元,從圖中可以看出,總共有12個單元。其中: 1. 取指有三個單元,分別為IFU1, IFU2和IFU3. 2. 解碼有兩個單元,分別為DEC1, DEC2。 在解碼這裡涉及到兩個技術,即微碼技術分支預測技術。 DEC1有三個解碼器,解碼結果是微指令序列,即將CISC的指令轉換成多條RISC指令,然後傳給DEC2。 在DEC2解碼後,如果發現有分支指令,則會進行分支預測,控制取指單元去取某個更可能的指令分支上的指令。 3. 寄存器分配表 4. Reorder Buffer,即對指令進行亂序的單元 5. DIS,應該是指令的分發單元 6. EX, 即流水線中的執行部分,這裡包括通常的ALU、MMX指令執行單元、浮點計算單元等。 7. RR 8. WB 9. RET

大頁

處理器分頁通常都是支持4KB的頁,一個頁設得如此之小,造成的一個問題就是頁表條目變多,頁表size大,TLB miss也增多了。現在它也支持4MB的大頁。可以從一定程度上緩解上述問題。

對應地,TLB增加了個項,專門用來緩存大頁的頁表項。

在現代處理器中,由於內存變得越來越大,伺服器的內存可能達到幾個TB的內存,大頁的支持已經提高了一個1GB的頁。

推薦閱讀:

Linux 系統中, 用戶態到內核態切換的過程中發生了什麼?
為什麼 AMD 的 CPU 現在還在用針腳式插座而不是像英特爾一樣用封裝式呢?
英特爾目前的競爭對手都有誰?
如何相对客观地衡量不同CPU/GPU之间的性能差异?(主要讨论arm和x86)?
為什麼電腦里CPU的工作溫度要限制在90攝氏度(左右)以下?

TAG:x86 | 中央处理器CPU | 中央处理器CPU计算机体系架构 |