複雜指令集電腦

複雜指令集電腦(英語:Complex Instruction Set Computer縮寫CISC)是一種微處理器指令集架構,每個指令可執行若干低階操作,諸如從記憶體讀取、儲存、和計算操作,全部集於單一指令之中。與之相對的是精簡指令集

複雜指令集的特點是指令數目多而複雜,每條指令字長並不相等,電腦必須加以判讀,並為此付出了效能的代價。

屬於複雜指令集的處理器有CDC 6600System/360VAXPDP-11Motorola 68000家族、x86AMD Opteron等。

刺激和益處

RISC哲學成為主流之前,許多電腦架構師試圖彌補所謂的「語義鴻溝英語Semantic gap」,即設計指令集以直接支援高階程式語言,如過程呼叫、迴圈控制和複雜的定址模式,允許資料結構和陣列訪問合併成單一指令。指令通常也經過高度編碼,以進一步增強代碼密度。這種指令集的緊湊性使得程式的大小更小,主主記憶體的訪問次數更少(當時的主主記憶體通常很慢),從而節省了電腦主記憶體和磁碟儲存的成本,並加快了執行速度。這也意味著,即使是在組合語言中,編程的生產力也得到了提升,而FortranAlgol高階語言並不總是可用或適用。實際上,這類微處理器在某些關鍵應用中至今仍以組合語言進行編程[來源請求]

新增指令

在1970年代,對高階語言的分析表明,編譯器生成了相對複雜的機器語言。研究發現,新增指令可以提高效能。添加了一些從未打算在組合語言中使用的指令,但與編譯後的高階語言很好地匹配。編譯器被更新以利用這些指令。這些語意豐富的指令和緊湊編碼的優勢在現代處理器中也可以看到,尤其是在高效能領域,其中快取是一個核心組件(與大多數嵌入式系統不同)。這是因為這些快速但複雜且昂貴的主記憶體本身具有大小限制,使得緊湊代碼非常有利。當然,它們之所以需要,是因為與(高效能)CPU核心相比,主主記憶體(即今天的動態隨機存取記憶體)依然很慢。

設計問題

雖然許多設計達到了提高吞吐量和降低成本的目標,並且通過較少的指令表達了高階語言構造,但也觀察到,這並非總是如此。例如,複雜架構的低階版本(即使用較少硬體的版本)可能會導致這種情況:通過不使用複雜的指令(如過程呼叫或進入指令),而是使用一系列更簡單的指令來改善效能。

其中一個原因是,架構師(微碼編寫者)有時會「過度設計」組合語言指令,包括一些在基本硬體上無法高效實現的特性。例如,可能會出現「副作用」(超出常規標誌的操作),如設定一個暫存器或主記憶體位置,而這個暫存器或主記憶體位置可能很少使用;如果通過普通的(非重複的)內部匯流排,甚至是外部匯流排來實現這類操作,每次都會占用額外的周期,因此效率較低。

即使是在平衡的高效能設計中,高度編碼和(相對)進階的指令可能也會使解碼和執行變得複雜,在有限的電晶體預算下難以高效處理。因此,這類架構需要處理器設計者付出大量工作,在某些情況下,如果基於解碼表和/或微碼序列的更簡單但(典型地)較慢的解決方案不合適時。

RISC的理念

在許多(但不是所有)CISC處理器中,執行微碼定義的操作的電路本身是一個處理器,在許多方面,它的結構與早期的CPU設計非常相似。1970年代初期,這促使人們提出了回歸更簡單處理器設計的想法,以便在沒有(當時相對較大且昂貴的)ROM表和/或PLA結構進行排序和/或解碼的情況下,也能更容易地應對。

一款早期的(事後被標記為)RISC處理器(IBM 801 —— IBM華生研究中心,1970年代中期)是一個高度管線化的簡單機器,最初是作為CISC設計中的內部微碼核心或引擎使用的[來源請求],但它也成為了將RISC理念介紹給更廣泛觀眾的處理器。簡潔性和規律性在可見指令集中的體現,使得在機器碼級別(即編譯器所看到的層級)更容易實現重疊的處理器階段(管線)。然而,在那個層級上,管線技術已經被一些高效能CISC「超級電腦」使用,以減少指令周期時間(儘管在當時,實施時受到組件數量和布線複雜度的限制)。而CISC處理器中的內部微碼執行,可以根據具體設計的不同,更多或更少地進行管線操作,因此在某種程度上更接近於RISC處理器的基本結構。

CDC 6600超級電腦(1965年首次交付)也被事後描述為RISC[1][2]。它採用了載入-儲存架構,允許最多五個載入和兩個儲存操作同時進行,且由程式設計師控制。它還擁有多個功能單元,可以同時操作。

超純量

在現代背景下,某些典型CISC架構使用的複雜變長編碼,使得直接構建超純量CISC編程模型變得複雜,但仍然可行;例如原始Pentium的順序超純量實現,以及Cyrix 6x86的亂序超純量實現,都是這一點的著名例子。典型CISC機器的運算元主記憶體訪問頻繁,這可能限制從代碼中提取的指令級並列性,儘管這一點在現代設計中通過使用快速快取結構和其他措施得到了強烈調節。由於指令本身緊湊且語意豐富,CISC處理器在每個機器碼單元(即每位元組或每位)上執行的工作量較高,這使得它在現代基於快取的實現中可能具有顯著優勢。

如今,邏輯、PLA和微碼的電晶體不再是稀缺資源;今天,只有大型高速緩衝記憶體主記憶體的數量受到電晶體數量的限制。儘管複雜,CISC解碼器的電晶體數量並不像處理器總電晶體數量那樣呈指數增長(大多數電晶體通常用於快取)。配合更好的工具和先進技術,這推動了高度編碼和變長設計的新實現,無需載入-儲存限制(即非RISC)。這支配了舊架構(如無處不在的x86)以及新的嵌入式系統微控制器設計的重新實現,和類似用途的設計。現代x86中的超純量複雜性通過將指令轉換為一個或多個微操作並動態發出這些微操作解決;Pentium ProAMD K5是早期的例子。它允許在(相對複雜的)解碼器(和緩衝區)後面放置一個相對簡單的超純量設計,可以說,在許多方面,這種技術提供了兩全其美的解決方案。這種技術也被IBM z196英語IBM z196及以後的z/Architecture英語z/Architecture微處理器採用。

參考文獻

  1. ^ Computer history: CDC 6000 series Hardware Architecture. Museum Waalsdorp. July 23, 2023 [January 19, 2024]. 
  2. ^ Anthony, Sebastian. The history of supercomputers. ExtremeTech. April 10, 2012 [January 19, 2024]. 
  • 本條目部分或全部內容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。
  • Tanenbaum, Andrew S. (2006) Structured Computer Organization, Fifth Edition, Pearson Education, Inc. Upper Saddle River, NJ.

延伸閱讀

參考

外部連結