複雜指令集電腦
複雜指令集電腦(英語:Complex Instruction Set Computer;縮寫:CISC)是一種微處理器指令集架構,每個指令可執行若干低階操作,諸如從記憶體讀取、儲存、和計算操作,全部集於單一指令之中。與之相對的是精簡指令集。
複雜指令集的特點是指令數目多而複雜,每條指令字長並不相等,電腦必須加以判讀,並為此付出了性能的代價。
屬於複雜指令集的處理器有CDC 6600、System/360、VAX、PDP-11、Motorola 68000家族、x86、AMD Opteron等。
刺激和益處
在RISC哲學成為主流之前,許多計算機架構師試圖彌補所謂的「語義鴻溝」,即設計指令集以直接支持高階程式語言,如過程調用、循環控制和複雜的尋址模式,允許數據結構和數組訪問合併成單一指令。指令通常也經過高度編碼,以進一步增強代碼密度。這種指令集的緊湊性使得程序的大小更小,主內存的訪問次數更少(當時的主內存通常很慢),從而節省了計算機內存和磁盤存儲的成本,並加快了執行速度。這也意味着,即使是在匯編語言中,編程的生產力也得到了提升,而Fortran或Algol等高階語言並不總是可用或適用。實際上,這類微處理器在某些關鍵應用中至今仍以匯編語言進行編程[來源請求]。
新增指令
在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 Pro和AMD K5是早期的例子。它允許在(相對複雜的)解碼器(和緩衝區)後面放置一個相對簡單的超標量設計,可以說,在許多方面,這種技術提供了兩全其美的解決方案。這種技術也被IBM z196及以後的z/Architecture微處理器採用。
參考文獻
- ^ Computer history: CDC 6000 series Hardware Architecture. Museum Waalsdorp. July 23, 2023 [January 19, 2024]. (原始內容存檔於2024-09-09).
- ^ Anthony, Sebastian. The history of supercomputers. ExtremeTech. April 10, 2012 [January 19, 2024]. (原始內容存檔於2024-02-27).
延伸閱讀
- Mano, M. Morris. Computer System Architecture (3rd Edition). ISBN 978-0131755635.
參考
外部連結