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