處理器種群及種群設計錯誤詳解
在那個年代所采用的一種主要方法就是實現針對HLL的處理器,就是把一個中間ISA裁剪為一種HLL,然后,采用或開發(fā)類似的處理器硬件以通過微編程來仿效經定義的ISA。在上世紀50年代,微碼首次被劍橋大學在EDSAC項目中由Maurice Wilkes實現,人們最初開發(fā)它是為計算機控制邏輯而開發(fā)一種更為簡單的方法1。微碼由實現中間ISA的基本處理器指 令序列組成。它或者由一些簡化的中間語言進行編譯,或者以匯編形式進行手工編寫。微匯編程序然后把匯編代碼轉換為可執(zhí)行代碼,這些可執(zhí)行代碼然后被存儲在 片上本地存儲器或快速訪問、低延遲存儲器上。在上世紀70年代和80年代,設計工程師把微碼存儲在由分立存儲器芯片或存儲器模塊實現的外部存儲器上。在當 今的IC集成水平上,處理器微碼幾乎總是存儲在片上RAM或ROM之上。
本文引用地址:http://www.ex-cimer.com/article/202380.htm微碼盡管曾經獲得了普及應用,但是,本質上已經從現代的處理器設計消失了,因為片上可用硬件快速增加、硬件成本的關聯下降以及廣泛的采用邏輯綜合來進行芯片設計。所有這些發(fā)展使得ISA的直接硬件實現更加容易并且更加在經濟上有吸引力。
贊成采用微碼的案例
微碼提供的若干優(yōu)點:
middot;目標碼在一個家族之內與其它處理器兼容或與以前一代的處理器兼容;
—以各種價格-性能特性能夠創(chuàng)建一個家族的待構建的處理器。在該家族中的高端處理器實現中間ISA更為直接或者甚至通過多功能單元而加速它,以開發(fā)指令級并行化(ILP)。在該家族中的低端處理器把中間ISA映射至更為有限的硬件上,從而使得程序的執(zhí)行更慢但是也成本更低
—在一個處理器家族中,能夠在多個處理器上 把經編寫的編譯器用于中間ISA。從中間ISA至較低端機器的實際指令組的映射—具體包括在微碼中—可以獨立的層編寫,并可能避免采用編譯器,或者至少需 要非常簡單的編譯器。進一步說,這樣的映射可能很少采用,因為中間ISA不會暴露給用戶,并且不必按照HLL可能演化的那種方式演化。一些語言編譯器目前 采用中間語言形式(例如Pascal的P代碼或Java的虛擬機)以及一個兩步—或通過解釋或兩步編譯—的過程以產生最終的可執(zhí)行代碼;這個過程可以簡化 對接并也能夠支持針對同一ISA的多個語言—即使不涉及微碼。
·通過采用多個ISA和多個微碼組,由微碼編寫的處理器能夠在運行時間上動態(tài)地適應不同的HLL,從而能夠針對以不同的語言編寫的程序實現更好的執(zhí)行性能。
·對于依賴于解釋器的各種語言,對適當的中間ISA的形式開發(fā)以及把那個中間ISA的微碼映射至目標ISA,能夠通過把它們的開發(fā)分為更加簡單 的兩級(對于工程設計來說是一流的劃分和征服方法)而加快語言的可用性。如上所述,這可能對于在RISC上實現多語言支持也是一個策略,或者,對于把一個 語言對接至多個處理器也是一個策略。
·正如上面所討論的,通過把實現一個語言編譯器的過程分為兩級,就有可能為一種新的目標機提供語言支持,較之于編寫特殊的目標編譯器更加快。
·利用一個中間ISA指令而不是兩個或兩個以上的目標ISA指令,代碼長度可以被減少。此外,通過從主存儲器減少指令抓取的數量可能改善性能。在這種情形下,中間ISA可能較之于固有的機器RISC ISA而創(chuàng)建一種CISC。
·對ISA僅僅部分支持而不是全部支持,可能簡化一種語言不常用部分的編譯器的編寫。對于支持ISA的新型處理器的硬件設計也可能在復雜性、設計努力以及項目風險上被減少,因此,采用經過很好測試的微碼實現的執(zhí)行來實現某些功能,可能較之于直接硬件實現來說是更好的替代方法。
·這一技術如果利用更多的現代處理技術的優(yōu)點可能會更好且時鐘速率更快,以提供對較老機器以及在更新的處理器上的指令集—對較老的ISA的一種虛擬化—的后向兼容性。下一步就是在軟件上完全執(zhí)行這個轉換,而完全不涉及任何微碼,這就需要各種技術改善以提供所需要的性能。這樣的改善可能包括較高頻率、邏輯、可能的多核以及更多的嵌入式存儲器。
反對采用微碼的案例
微碼還具有若干缺點:
·與具有較為簡單的ISA的機器相比,低端中間ISA機器的性能常常非常差,因為中間ISA機器的分層常常證明并不是最優(yōu)化地使用計算資源。
·與針對真實的目標機器能夠實現的根本簡單的ISA的編譯器相比,在中間ISA上生成代碼的編譯器無法做到同一程度的最優(yōu)化。對編譯的最優(yōu)化只能在兩個獨立的層面上完成。瞄準一個家族中直接實現中間ISA的高端處理器的HLL編譯器無法為該家族中的低端處理器進行最優(yōu)化,除非為它們做特別的修改,這樣會打消它們的一些優(yōu)點。
·為了滿足若干不同的語言的要求,一種針對若干不同ISA的機器可能結合不穩(wěn)定的設計折中,從而為所有的目標語言提供差的性能。
·微碼編譯器、翻譯器或生成器(把固定的中間ISA翻譯為根本的目標、簡單的ISA)可能極度簡單或者難以適應,因為它并不打算頻繁地運行。此外,微碼可能難以改變,特別是如果被存儲在ROM之中的話(當然一些機器在片上RAM存儲的部分微碼允許改變)。
中間ISA概念的一些領先的支持者把它們具體表達在Burroughs處理器中 (如上所述),但是,在文獻中可以發(fā)現許多其它的努力,由多年來構建的許多不同的微可編程計算機的可用性來支持。Carlson2討論的一種微編程 Fortran計算機代表了Fortran語言的接近直接實現,并且僅僅需要一個簡單的翻譯器,此外,他還討論了一種微編程的EULER處理器(EULER是Algol 60的變種)。Hassitt、Lageschulte和Lyon3討論的APL機器就采用了微編程。
在上世紀80年代,Flynn4調查了許多架構方法,其中,包括微碼概念,并試圖定義直接執(zhí)行HLL的理想的語言機器。Moulton5研究了 支持HLL編譯和執(zhí)行的微編程及其的一般設計。在用微編程支持的許多其它HLL當中(見前一節(jié)更多的討論)有LISP6和Prolog7??赡苷f明這一概 念的最早代表就是Burroughs機器的B1700/1800系列,它支持面向Cobol、Fortran和RPG8的中間ISA。最近,我們已經看到 這一方法的元素被用于解釋方法之中,如具有P代碼的Pascal和具有其虛擬機的Java;盡管具有足夠的動機來改善性能并且經過足夠的時間,但是,這些 語言的固有編譯器仍然會出現。在任何情況下,這些方法可能不必要采用在現代處理器上的微碼。
過去殘留下來的概念
你可能會推想,上世紀80年代VLSI的出現已經縮減了微編程。的確,行業(yè)標準微處理器ISA的出現,那些ISA的多個世代的實現,以及利用現代IC制造工藝可用純晶體管數的增加,似乎已經減少了微碼方法的應用。然而,這一技術的幾個發(fā)育不全的殘跡已經在最近幾年浮出表面。例如,在上世紀80年代末,Unisys推出了所謂的單芯片A系列主機處理器(SCAMP)9,其中結合的相對低端的RISC處理器類似于該公司在小型、低端的A3和A4主機上采用的處理器,它里面采用的幾百K微碼就是沿用從上世紀50年代以來在最初的B5000出現時所采用的Burroughs E-model指令集。SCAMP被用于Micro-A計算機,在此,SCAMP芯片利用許多微碼ROM芯片被匯編至2英寸×2英寸的多芯片模塊之中。
這一方法的另一個有趣的遺跡以及這一問題的一個反例就是在從AMD K610開始的、現在的奔騰級處理器之中發(fā)現的問題。在這些處理器中,以前x86處理器世代的CISC指令利用RISC指令集實現。處理器的指令解碼單元把CISC指令分解為RISC操作,然后,匯編并把這些更為簡單的操作按組流出至處理器的并行執(zhí)行單元。它并不是嚴格的微碼,但是,它在一定程度上明顯從微碼而來。
這種設計方法還減輕了為更新的處理器創(chuàng)建新的CISC指令。它創(chuàng)建了一種混合CISC/RISC架構。顯然,微架構/微碼機器仍然具有一定的作用和位置,它隨著半導體技術和處理器架構的不斷演化而興衰?;蛟S,這一蜥蜴類家族樹的遺跡將在當今更為敏捷的哺乳類機器上延續(xù)下去。
盡管依然存在一些中間ISA的殘留應用,如上所述,微碼已經證明在進化上走入了死胡同,因為它不如直接用硬件高效地執(zhí)行一個ISA。一旦硬件電路豐富,微碼的硬件效率就會由它的執(zhí)行低效而超越。在當今的處理器設計中,讓大量比較簡單的機器通過微碼仿效更為復雜的機器顯然應用不廣泛,盡管存在偶然的例外。新的編程語言常常最初通過比較簡單的中間表示法進行解釋,但是,如果該語言普及并且如果性能成問題,那么,不可避免地會出現針對“裸金屬”處理器的有效的編譯器,因此,仍然需要采用微編程。
評論