中央處理器

中央處理器廣義上指一系列可以執行復雜的計算機程式的邏輯機器。這個空泛的定義很容易地將在“CPU”這個名稱被普遍使用之前的早期計算機也包括在內。無論如何，至少從1960年代早期開始，這個名稱及其縮寫已開始在電子計算機產業中得到廣泛應用。儘管與早期相比，“中央處理器”在物理形態、設計製造和具體任務的執行上有了極大的發展，但是其基本的操作原理一直沒有改變。早期的中央處理器通常是為大型及特定應用的計算機而定製。但是，這種昂貴的為特定應用定製CPU的方法很大程度上已經讓位於開發便宜、標準化、適用於一個或多個目的的處理器類。這個標準化趨勢始於由單個電晶體組成的大型機和微機年代，隨著積體電路的出現而加速。IC使得更為複雜的中央處理器可以在很小的空間中設計和製造。中央處理器的標準化和小型化都使這一類電子零件在現代生活中的普及程度越來越高。現代處理器出現在包括從汽車、手機到兒童玩具在內的各種物品中。歷史.在現今的CPU出現之前，如同ENIAC之類的計算機在執行不同程式時，必須經過一番線路調整才能啟動。由於它們的線路必須被重設才能執行不同的程式，這些機器通常稱為「固定程式計算機」的裝置，那些最早與儲存程式型計算機一同登場的裝置也可以被稱為CPU。儲存程式型計算機的主意早已體現在ENIAC的設計上，但最終還是被省略以期早日完成。在1945年6月30日，ENIAC完成之前，著名數學家馮·諾伊曼發表名為《關於EDVAC的報告草案》的論文。它揭述儲存程式型計算機的計劃最終將在1949年8月完成。EDVAC的目標是執行一定數量與種類的指令。值得注意的是，儘管馮·諾伊曼由於設計了EDVAC，使得他在發展儲存程式型計算機上的貢獻最為顯著，但其他早於他的研究員如康拉德·楚澤也提出過類似的想法。另外早於EDVAC完成，利用哈佛架構製造的馬克一號，也利用打孔帶而非電子記憶體用作儲存程式的概念。馮·諾伊曼架構與哈佛架構最主要的不同在於後者將CPU指令與資料分開存放與處置，而前者使用相同的記憶體位置。大多近代的CPU依照馮·諾伊曼架構設計，但哈佛架構一樣常見。身為數位裝置，所有CPU處理不連續狀態，因此需要一些轉換與區分這些狀態的基礎元件。在市場接受電晶體前，繼電器與真空管常用在這些用途上。雖然這些材料速度上遠優於純粹的機械構造，但是它們有許多不可靠的地方。例如以繼電器建造直流時序邏輯迴路需要額外的硬體以應付接觸點跳動問題。而真空管不會有接觸點跳動問題，但它們必須在啟用前預熱，也必須同時停止運作。通常當一根真空管壞了，CPU必須找出損壞元件以置換新管。因此早期的電子真空管式計算機快於電子繼電器式計算機，但維修不便。類似EDVAC的真空管計算機每隔八小時便會損壞一次，而較慢較早期的馬克一號卻不太發生故障。但在最後，由於速度優勢，真空管計算機主宰了當時的計算機世界，儘管它們需要較多的維護照顧。大多早期的同步CPU，其時鐘頻率低於近代的微電子設計。那時常見的時鐘頻率為10萬赫茲到4百萬赫茲，大大受限於內建切換裝置的速度。分立電晶體與積體電路中央處理器.由於許多科技廠家投入更小更可靠的電子裝置，使得設計CPU變得越來越複雜。電晶體的面世即是CPU第一個質的飛躍。1950到60年代的電晶體CPU不再以體積龐大、不可靠與易碎的開關元件元件的印刷電路板上，從而向體積小、可靠與不易損壞方向發展。在此時期，將許多電晶體放置在擁擠空間中的方法大為普及。積體電路將內含的電晶體數量增加到成百上千。1964年IBM推出了System/360計算機架構，此架構讓一系列速度與效能不同的IBM計算機可以執行相同的程式。此確實為一項創舉，因為當時的計算機大多互不相容，甚至同一家廠商製造的也是如此。為了實踐此項創舉，IBM提出了微程式概念，此概念依然廣泛使用在現代CPU上。System/360架構由於太過成功，因此主宰了大型計算機數十年之久，並留下一系列使用相似架構，名為IBM 的現代主機產品。同一年推出另一個深具影響力且瞄準科學與研究市場的計算機，名為PDP-8。DEC稍後推出非常有名的PDP-11，此產品原先計劃以SSI IC構組，但在LSI技術成熟後改為LSI IC。與之前SSI和MSI的祖先相比，PDP-11的第一個LSI產品包含了一個只用了4個LSI IC的CPU。電晶體計算機有許多前一代產品沒有的優點。除了可靠度與低耗電量之外，由於電晶體的狀態轉換時間比繼電器和真空管短得多，CPU也就擁有更快的速度。得益於可靠度的提升和電晶體轉換器切換時間的縮短，CPU的時鐘頻率在此時期達到十幾百萬赫茲。另外，由於分立電晶體與IC CPU的使用量大增，新的高效能設計，例如SIMD的崛起。中央處理器操作原理.CPU的主要運作原理，不論其外觀，都是執行儲存於被稱為程式裡的一系列指令。在此討論的是遵循普遍的馮·諾伊曼結構設計的裝置。程式以一系列數字儲存在計算機記憶體中。差不多所有的馮·諾伊曼CPU的運作原理可分為四個階段：提取、解碼、執行和寫回。第一階段，提取，從程式記憶體中檢索。CPU根據從記憶體提取到的指令來決定其執行行為。在解碼階段，指令被拆解為有意義的片段。根據CPU的指令集架構，或是一個空間的定址值：暫存器或記憶體位址，以定址模式決定。在舊的設計中，CPU裡的指令解碼部分是無法改變的硬體裝置。不過在眾多抽象且複雜的CPU和ISA中，一個微程式時常用來幫助轉換指令為各種形態的訊號。這些微程式在已成品的CPU中往往可以重寫，方便變更解碼指令。在提取和解碼階段之後，接著進入執行階段。該階段中，連線到各種能夠進行所需運算的CPU部件。例如，要求一個加法運算，算術邏輯單元將會連線到一組輸入和一組輸出。輸入提供了要相加的數值，而且在輸出將含有總和結果。ALU內含電路系統，以於輸出端完成簡單的普通運算和邏輯運算。最終階段，寫回，以一定格式將執行階段的結果簡單的寫回。運算結果經常被寫進CPU內部的暫存器，以供隨後指令快速存取。在其它案例中，運算結果可能寫進速度較慢，如容量較大且較便宜的主記憶體。某些型別的指令會操作程式計數器，而不直接產生結果資料。這些一般稱作「跳轉」並在程式中帶來迴圈行為、條件性執行和函式。許多指令也會改變標誌暫存器的狀態位元。這些標誌可用來影響程式行為，緣由於它們時常顯出各種運算結果。例如，以一個「比較」指令判斷兩個值的大小，根據比較結果在標誌暫存器上設定一個數值。這個標誌可藉由隨後的跳轉指令來決定程式動向。在執行指令並寫回結果資料之後，程式計數器的值會遞增，反覆整個過程，下一個指令週期正常的提取下一個順序指令。如果完成的是跳轉指令，程式計數器將會修改成跳轉到的指令位址，且程式繼續正常執行。許多複雜的CPU可以一次提取多個指令、解碼，並且同時執行。這個部分一般涉及「經典RISC管線」，那些實際上是在眾多使用簡單CPU的電子裝置中快速普及。設計與實作.整數範圍.CPU數字表示方法是一個設計上的選擇，這個選擇影響了裝置的工作方式。一些早期的數字計算機內部使用電氣模型來表示通用的十進位制記數系統數字。還有一些罕見的計算機使用三進製表示數字。幾乎所有的現代的CPU使用二進位制系統來表示數字，這樣數字可以用具有兩個值的物理量來表示，例如高低電平等等。與數表示相關的是一個CPU可以表示的數的大小和精度，在二進位制CPU情形下，一個位表示範圍內的數，也就是說，28或256個離散的數值。 實際上，整數精度在CPU可執行的軟體所能利用的整數取值範圍上設定了硬體限制。整數精度也可影響到CPU可定址的記憶體數量。譬如，如果二進位制的CPU使用32位來表示記憶體地址，而每一個記憶體地址代表一個八位元組，CPU可定位的容量便是232個位元組或4GB。以上是簡單描述的CPU地址空間，通常實際的CPU設計使用更為複雜的定址方法，例如為了以同樣的整數精度定址更多的記憶體而使用分頁技術。更高的整數精度需要更多線路以支援更多的數字位元，也因此結構更復雜、更巨大、更花費能源，也通常更昂貴。因此儘管市面上有許多更高精準度的CPU通常顯著影響它們的設計。為了同時得到高與低位寬度的優點，許多CPU依照不同功用將各部分設計成不一樣的位寬度。例如使用一個原為32位的CPU，但它在其浮點單元使用了128位精度，以得到更佳的精確度與浮點數的表示範圍。許多後來的CPU設計使用類似的混合位寬，尤其當處理器設計為通用用途，因而需要合理的整數與浮點數運算能力時。時鐘頻率.主頻＝外頻×倍頻。大部分的CPU，甚至大部分的時序邏輯裝置，本質上都是同步的。也就是說，它們被設計和使用的前題是假設都在同一個同步訊號中工作。這個訊號，就是眾所周知的時脈訊號，通常是由一個週期性的方波。透過計算電訊號在CPU眾多不同電路中的分支中迴圈所需要的最大時間，設計者們可為時脈訊號選擇一個適合的週期。該週期必須比訊號在延遲最大的情況下移動或者傳播所需的時間更長。設計整個CPU在時鐘訊號的上升沿和下降沿附近移動資料是可能的。無論是在設計還是元件的維度看來，均對簡化CPU有顯著的優點。同時，它也存在CPU必須等候回應較慢元件的缺點。此限制已透過多種增加CPU並行運算的方法下被大幅的補償了。無論如何，結構上的改良無法解決所有同步CPU的弊病。比方說，時脈訊號易受其它的電子訊號影響。在逐漸複雜的CPU中，越來越高的時鐘頻率使其更難與整個單元的時脈訊號同步。是故近代的CPU傾向發展多個相同的時脈訊號，以避免單一訊號的延遲使得整個CPU失靈。另一個主要的問題是，時脈訊號的增加亦使得CPU產生的熱能增加。持續變動的時鐘頻率使得許多元件切換而不論它們是否處於運作狀態。一般來說，一個處於切換狀態的元件比處於靜止狀態還要耗費更多的能源。因此，時鐘頻率的增加使得CPU需要更有效率的冷卻方案。其中一個處理切換不必要元件的方法稱為時脈閘控，即關閉對不必要元件的時鐘頻率順從AMULET以及MIPS R3000相容MiniMIPS。與其完全移除時脈訊號，部份CPU的設計允許一定比例的裝置不同步，比方說使用不同步算術邏輯單元連線超純量管線以達成一部份的算術效能增進。在不將時脈訊號完全移除的情況下，不同步的設計可使其表現出比同步計數器更少的數學運算。因此，結合了不同步設計極佳的能源耗損量及熱能產生率，使它更適合在嵌入式計算機上運作。並行.前面描述的CPU結構只能在同一時間點執行一個，這種型別的CPU被稱為。這一型別的CPU有一很大的缺點：效率低。由於只能執行一個指令，此類的程序給與低標量CPU固有的低效能。由於每次僅有一個指令能夠被執行，CPU必須等到上個指令完成才能繼續執行。如此便造成下標量CPU延宕在需要兩個以上的時鐘迴圈才能完成的指令。即便增加第二個執行單元。為了達成標量目標以及更佳的效能，導致使得CPU傾向平行運算的各種設計越來越多。提到CPU的平行，有兩個字彙常用來區分這些設計的技術。指令平行處理來區分。其中一種達成增加平行運算的方法，便是在主要指令完成執行之前，便進行指令提取及解碼。這種最簡易的技術，我們稱為指令管線化，且其被利用在泰半現代的泛用CPU中。透過分解執行通道至離散階段，指令管線化可以兩個以上的指令同時執行。相較於已被淘汰的組合管線，指令管線化不再使用等候指令完全在管線中退出才執行下一指令的技術。指令管線化產生了下一作業需要前一作業才可完成的可能性。此類狀況又常稱為相依衝突。解決的方法是，對此類的情況增加額外的注意，及在相依衝突發生時延遲一部份的指令。自然地，此種解決方法需要額外的迴圈，是故指令管線化的處理器比低標量處理器還要複雜。此外，對於指令管線化的改進啟發了減少CPU元件閒置時間的技術。稱為超標量的設計包括了一條長指令管線化及多個相同的執行單元。上標量管線的分派器同時讀取及透過數個指令；分派器決定指令是否能夠平行執行並分配到可執行的執行單元。大致上來說，一個上標量的CPU能夠同時分派越多的指令給閒置的執行單元，就能夠完成越多的指令。上標量CPU結構的設計中，最困難的部份便是創造一個有效率的分派器。分派器必須能夠快速且正確的決定指令是否能夠平行執行，並且讓閒置的執行單元最小化。其需要指令管線化常時的充滿指令流，且提升了在上標量結構中一定數量的CPU快取。其亦催生了危害迴避的技術，如分支預測、與跨序執行以維持高層次的效能。藉由嘗試預測特定的指令選擇何分支，CPU能夠最小化整個指令管線等待特定的指令完成的次數。投機執行則是藉著執行部份的指令以得知其是否在整個作業完成後仍被需要而提供適度的效能提升。跨序執行則是重新整理指令執行的命令以降低資料相依。當不是所有的CPU元件均有上標量效能時，未達上標量的元件效能便會因定序推遲而降低。奔騰的原型有兩個每一時脈迴圈可接收一個指令的上標量算術邏輯單元，但其浮點算術處理器不能在每一時脈迴圈接收一個指令。因此P5的效能只能算是整數上標量而非浮點上標量。英特爾Pentium結構的下一代P6加入了浮點運算處理器的上標量能力，因此在浮點指令上有顯著的效能提升。此兩種簡單的管線及上標量設計，均能透過允許單一處理器在一個時鐘迴圈完成一個指令，提升指令管線化的效能。多數的近代CPU設計至少都在上標量以上，且幾乎所有十年內的泛用CPU均達上標量。近年來，一些重視高指令管線化的計算機將其從CPU的硬體移至軟體。超長指令字元（的策略使得一部份的指令管線化成為軟體，減少CPU推動指令管線化的工作量，並降低了CPU的設計複雜度。另一個常用以增加CPU平行運算效能的策略是讓CPU有同時執行多個執行緒的能力。大致上說來，高同時執行緒平行執行非獨立記憶體訪問的方式來組織。這些非常不同的方法，全部為了實現同一個目標，就是增加CPU同時處理多個執行緒的能力。CMP和SMP這兩種方法其實是非常相似的，而且是最直接的方法。這裡有一些概念上的東西關於如何實兩個或是兩個以上完全單獨的CPU。在CMP中，多個處理器核心會被放入同一個包中，有時會在非常相近的積體電路中。另一方面SMP包含多個包在其中，NUMA和SMP很相像，但是NUMA使用非單一的記憶體訪問方式。這些對於一臺有著多個CPU的電腦來說是非常重要的，因為每個處理器訪問記憶體的時間會很快的被SMP分享的模組消耗掉，因些會造成很嚴重的延遲，因為CPU要等待可用的記憶體．這時NUMA是個不錯的選擇，它可以允許有多個CPU同時存在一臺電腦中而且SMP也可以同時實現．SMT有一些不同之處，就是SMT會盡可能的減少CPU處理能力的分佈。TLP的實現實際上和超標量體系結構的實現有些相似，其實上它常常被用在超標量體系結構處理器中，如IBM的。相比於複製整個CPU，SMT會複製需要的部分來提取指令，加密和分配，就像計算機中的一般的暫存器一樣。因此這樣會使SMT CPU保持處理單位運作的連續，一些通常會提供給處理單位多個指令而且來自不同的軟體執行緒，這和ILP結構很相似。相比於處理多個指令來自同一個執行緒，它會同時處理來自不同執行緒的多個指令。資料並行.上面提及過的處理器都是一些常量儀器，而針對向量處理的CPU是較不常見的型別，但它的重要性卻越來越高。事實上，在計算機計算上，向量處理是很常見的。顧名思義，向量處理器能在一個命令週期與及眾多不同總類的科學及工程上的工作。當常量處理器只能針對一組資料於單一命令週期內完全執行提取、解碼、執行和寫回四個階段的同時，向量處理器已能對較大型的資料如相同時間內執行相同動作。當然，這假設了這個應用程式於單一命令週期內對處理器進行多次要求。大多數早期的向量處理器，例如，大多都只會用於和科研及密碼學有關的應用程式。但是，隨著多媒體向數位媒體轉移，對於能做到『單指令，多資料』的普通用途處理器需求大增。於是，在浮點計算器普及化不久，擁有『單指令，多資料』功能的普通用途處理器便面世了。有些早期的『單指令，多資料』規格，如英特爾的，只能作整數運算。因為大多數要求『單指令，多資料』的應用程式都要處理浮點數字，所以這個規格對軟體開發者無疑是一個主要障礙。幸好，這些早期的設計慢慢地被改進和重新設計為現時普遍的『單指令，多資料』新規格，AMD公司也推出了第一個真正能執行浮點SIMD指令集3DNow!，在每個時脈週期可得到4個單精確度浮點數結果，是當時一般x87浮點處理器的4倍。新規格通常都於一ISA關連著。近年，一些值得注意的例子一定要數英特爾的SSE和PowerPC相關的AltiVec。多核心.多核心中央處理器是在中央處理器晶片或封裝中包含多個處理器核心，以偶數為核心數目較為常見，一般共用音訊檔案是根據條目“中央處理器”的修訂版本錄製的，以朗讀，不會反映對該條目的後續編輯。更多有聲條目