在計(jì)算機(jī)發(fā)展的整個(gè)70年期間,曾經(jīng)出現(xiàn)了各種各樣的分立 和嵌入式處理器種群,它們已經(jīng)進(jìn)化,并且有些種群已經(jīng)逐漸消失。從這一進(jìn)化中產(chǎn)生了許多新奇的設(shè)計(jì)。有些新奇的概念繼續(xù)生存,有些幾乎立即消亡,而一些概 念僅僅存活了短暫的時(shí)間就銷(xiāo)聲匿跡了,但是,繼承他們基因的技術(shù)在后續(xù)的種群中再次出現(xiàn)。 本系列深度分析文章將調(diào)查13種不成功的處理器種群。這些文章探索了造成每一個(gè)處理器種群死亡的主要設(shè)計(jì)錯(cuò)誤。每一個(gè)主要設(shè)計(jì)錯(cuò)誤還用一個(gè)或幾 個(gè)例子來(lái)闡述。然而,隨著技術(shù)使得許多老的概念煥發(fā)新生、重塑輝煌并再次成為新概念而獲得無(wú)止境的重復(fù)利用,也許不知什么時(shí)候,勇猛的探索者/設(shè)計(jì)師將接 下來(lái)遇見(jiàn)這些處理器種群當(dāng)中的哪一個(gè)呢?這些種群可能被當(dāng)成是恐龍:許多基于這些概念的處理器曾經(jīng)就是它們那個(gè)時(shí)代的優(yōu)勢(shì)種群,或者,已經(jīng)曾經(jīng)大放光芒并 極其繁榮而引起了大量的關(guān)注。正是因?yàn)椴粩噙M(jìn)化的世界造成了我們的處理器種群的必然演化甚至滅絕,但這并不意味著一個(gè)處理器種群在它存在的鼎盛時(shí)期不能合 理地適應(yīng)世界。 錯(cuò)誤1:設(shè)計(jì)高水平的計(jì)算機(jī)指令集架構(gòu)以支持特殊的語(yǔ)言或語(yǔ)言域(Myopisaur)。 從最早的計(jì)算時(shí)代起,人們不斷推動(dòng)在抽象級(jí)解決編程問(wèn)題,從接線(xiàn)板編程、撥動(dòng)開(kāi)關(guān)輸入、機(jī)器語(yǔ)言輸入、匯編語(yǔ)言到整個(gè)一大群“高級(jí)”編程語(yǔ)言(HLL),從上世紀(jì)50年代的Fortran和Cobol,乃至上下半葉研究出來(lái)的幾百或上千種編程語(yǔ)言。 HLL一被開(kāi)發(fā)出來(lái),人們就開(kāi)始擔(dān)心用于捕獲編程問(wèn)題的答案HLL描述與被在目標(biāo)機(jī)上執(zhí)行的由HLL編譯器產(chǎn)生的實(shí)際指令之間的語(yǔ)義差異。每一 種編譯器常常產(chǎn)生不好的結(jié)果—有時(shí)候非常糟糕。即使現(xiàn)在,盡管編譯器的開(kāi)發(fā)經(jīng)歷了50多年,但是,對(duì)于許多算法來(lái)說(shuō),最高技能的人類(lèi)匯編語(yǔ)言編碼員所獲得 的編譯結(jié)果的質(zhì)量,要比由最佳的HLL編程器與最佳的可用最優(yōu)化編譯器所產(chǎn)生的代碼高一個(gè)數(shù)量級(jí)(或一個(gè)數(shù)量級(jí)以上)。 計(jì)算機(jī)研究人員和商用計(jì)算機(jī)供應(yīng)商不可避免地開(kāi)始研究根據(jù)特殊的HLL或語(yǔ)言種群調(diào)節(jié)一種特殊處理器的可行性,以期把處理器的指令集與語(yǔ)言的要求更為緊密地匹配起來(lái),并縮小語(yǔ)義差異。其理論就是以那些目標(biāo)HLL編寫(xiě)的程序應(yīng)該在這些經(jīng)調(diào)整的機(jī)器上更為高效地執(zhí)行。 一系列不合適的努力 為了實(shí)現(xiàn)這一方法—出現(xiàn)在從主機(jī)、微型機(jī)、分立微處理器IC到嵌入式處理器內(nèi)核—的幾十年經(jīng)驗(yàn)以及努力,已經(jīng)再三地確定這種方法是一個(gè)重大架構(gòu) 錯(cuò)誤。的確,在Hennessy和Patterson關(guān)于計(jì)算機(jī)架構(gòu)的開(kāi)創(chuàng)性圖書(shū)中可以發(fā)現(xiàn)這是典型的“謬誤和缺陷”之一[HEN, p. 142]。 這一方法存在的基本問(wèn)題是多方面的:盡管已經(jīng)被調(diào)整為一種語(yǔ)言,但是,處理器可能(而且非?赡軐)被用于運(yùn)行于其它語(yǔ)言編寫(xiě)的程序。經(jīng)調(diào)整的處理器將—因其針對(duì)特定語(yǔ)言的調(diào)整—在運(yùn)行采用這些其它HLL編寫(xiě)的程序時(shí)效率比較低。 在較早時(shí)代,硬件資源很少被花費(fèi)在極少被采用的指令的有效執(zhí)行上—這是對(duì)昂貴的架構(gòu)資本的一種劣質(zhì)應(yīng)用。 因一種HLL構(gòu)造的一些非常特殊的應(yīng)用,針對(duì)特定語(yǔ)言的指令可能終止執(zhí)行,并且對(duì)于典型和最常見(jiàn)的應(yīng)用是沒(méi)有用的。因此,對(duì)這種指令的硬件本質(zhì)上是一種浪費(fèi)。 語(yǔ)言演化。基于固定、針對(duì)特殊HLL硬件的計(jì)算機(jī)架構(gòu)較之于語(yǔ)言本身趨向于在非常長(zhǎng)的時(shí)間內(nèi)維持不變,因?yàn)檐浖扔布右子谧兓?/p> 針對(duì)特殊HLL的處理器的流行被目標(biāo)HLL的普及而被無(wú)情地終結(jié)。在各種語(yǔ)言中的少數(shù)體驗(yàn)造成一種處理器具有最少的市場(chǎng)訴求。 因此,這種架構(gòu)方法的缺陷花了很長(zhǎng)時(shí)間才顯現(xiàn)出來(lái)。從上世紀(jì)60年代至80年代中期,在RISC架構(gòu)方法發(fā)源以前,基于復(fù)雜指令集計(jì)算機(jī) (CISC)、針對(duì)特殊HLL的計(jì)算機(jī)架構(gòu)激起了巨大的興趣。研究人員撰寫(xiě)了幾百或上千的論文,關(guān)于這個(gè)課題的專(zhuān)題研討會(huì)和座談會(huì)相當(dāng)流行,而各個(gè)公司根 據(jù)這一設(shè)計(jì)哲學(xué)向市場(chǎng)推出各種真實(shí)的機(jī)器。 E-mode意味著緩慢的模式 Burroughs公司的"E-mode"機(jī)可能是被設(shè)計(jì)為支持特殊語(yǔ)言的最著名的機(jī)器系列。這個(gè)系列包括從上世紀(jì)60年代初至90年代的 B5000/6000/7000 和A-series機(jī)(一些兼容的處理器仍然在供貨)1。這些機(jī)器被設(shè)計(jì)為直接執(zhí)行Algol 60。這種計(jì)算機(jī)家族還具有許多其它重要的功能,包括基于堆棧的架構(gòu)、非平存儲(chǔ)器的利用、無(wú)匯編語(yǔ)言、操作系統(tǒng)和專(zhuān)用的管理子系統(tǒng)采用與Algol 60的直接對(duì)話(huà)編寫(xiě)、并且采用的是48比特的存儲(chǔ)字(加上標(biāo)簽比特)。的確,在上世紀(jì)60年代和70年代期間,Burroughs幾乎成為了針對(duì)特殊 HLL的計(jì)算機(jī)設(shè)計(jì)方法的偶像。 在這個(gè)時(shí)期,這家公司生產(chǎn)了中等規(guī)模和小型的針對(duì)Cobol的主機(jī)(B2000/3000/4000),以及一種被用于B1700/1800機(jī) 的有趣的微碼架構(gòu),其中,包括一組可以被進(jìn)出交換以匹配不同語(yǔ)言的解釋指令集組。正如關(guān)于B5000的最熱心評(píng)論所說(shuō),Burroughs“專(zhuān)注于采用較 高級(jí)的編程注釋以實(shí)際地排斥機(jī)器或匯編語(yǔ)言”[EAR]。 遺憾的是,Burroughs E-mode機(jī)因HLL機(jī)的若干缺點(diǎn)而受損。它們?cè)跇?biāo)準(zhǔn)科學(xué)和商務(wù)處理語(yǔ)言—FORTRAN和COBOL—上的表現(xiàn)肯定是缺乏活力的。后來(lái),為這些機(jī)器構(gòu) 建C編譯器以及把Unix引入它們的根本架構(gòu)上的嘗試被證明是困難的,因架構(gòu)的分層存儲(chǔ)結(jié)構(gòu)沒(méi)有小的部分。要嘗試把針對(duì)特定HLL的指令集擴(kuò)展至較低端的 機(jī)器(包括由Burroughs的接任者Unisys在1989年推出的一種單芯片實(shí)現(xiàn)—稱(chēng)為單芯片A系列主機(jī)處理器(SCAMP) [UNI])需要大量的微碼。遺憾的是,Algol 60從未真正以流行的編程語(yǔ)言起飛。這毫無(wú)疑問(wèn)減少了Burroughs機(jī)的普及程度。 注釋?zhuān)宏P(guān)于E-mode機(jī)—[ORG73]、[CHU-CAR]和[CHU-DOR]—有幾篇參考文選可用,這里僅僅給出了其中幾篇。 如上所述,Burroughs以面向B2000/3000/ 4000計(jì)算機(jī)的COBOL語(yǔ)言繼續(xù)它的針對(duì)特殊HLL的設(shè)計(jì)哲學(xué),它至少具有針對(duì)更為流行、鎖定商務(wù)的HLL的有點(diǎn)。 許多語(yǔ)言,同樣差的結(jié)果 針對(duì)特定HLL的處理器設(shè)計(jì)的 吸引力,還導(dǎo)致人們開(kāi)發(fā)直接運(yùn)行用APL [HAS]、Lisp [WHO]、Prolog [FAG]以及其它直接針對(duì)Basic、Fortran、Pascal、PL/I和Snobol [DIT80]編寫(xiě)的程序的機(jī)器。的確,針對(duì)特定HLL的計(jì)算機(jī)架構(gòu)設(shè)計(jì)方法所存在的問(wèn)題導(dǎo)致人們?cè)?980年[DIT80]對(duì)它們進(jìn)行了深刻的反思,只 是在CISC工作站出現(xiàn)之前、以及后來(lái)在上世紀(jì)80年代中期RISC處理器和工作站出現(xiàn)之時(shí)。 從主機(jī)時(shí)代向著小型和微型計(jì)算機(jī)時(shí)代的遷移,見(jiàn)證了上述針對(duì)特定HLL的計(jì)算機(jī)架構(gòu)設(shè)計(jì)方法以Burroughs B1700/1800獲得重復(fù)使用,它為若干語(yǔ)言提供了微碼指令集(COBOL、RPG以及其中的Fortran) [ORG77]和許多專(zhuān)用的工作站級(jí)機(jī)器。被設(shè)計(jì)來(lái)直接執(zhí)行LISP的機(jī)器就是一個(gè)特別著名的例子(LISP機(jī)、Symbolics)。 分立微處理器時(shí)代也看到了若干針對(duì)特定HLL的微處理器架構(gòu),包括:被設(shè)計(jì)來(lái)運(yùn)行Occam的Inmos Transputer;由貝爾實(shí)驗(yàn)室設(shè)計(jì)的用于直接執(zhí)行C程序的CRISP處理器[DIT87a, DIT87b];在所有這類(lèi)微處理器當(dāng)中,也許最為著名(或聲名狼藉)的就是英特爾公司的432,它被設(shè)計(jì)為運(yùn)行以Ada語(yǔ)言編寫(xiě)的程序[GEH]。 Transputer及其Occam描述了一種針對(duì)特定HLL的處理器的功能之一,有時(shí)候,它的開(kāi)發(fā)者對(duì)于特殊的計(jì)算理論以信奉宗教般或準(zhǔn)宗教般的熱愛(ài)投 入,從而以奴性的方式證明它自己對(duì)于一種編程語(yǔ)言的奉獻(xiàn),并盡力進(jìn)行實(shí)質(zhì)努力以開(kāi)發(fā)一種支持它的機(jī)器。 盡管Transputer編譯器后來(lái)形成為更加傳統(tǒng)的HLL,但是,Transputer是以O(shè)ccam推出的,這是一種基于Tony Hoare的計(jì)算序列處理概念。Transputer就是特定為Occam構(gòu)建的。Inmos的領(lǐng)導(dǎo)人Iann Barron是Occam的最高牧師。Transputer的歷史描述了前面所列出的針對(duì)HLL的架構(gòu)所存在的問(wèn)題之一。它的成功高度依賴(lài)于找到一個(gè)對(duì) Occam有足夠興趣的市場(chǎng),以購(gòu)買(mǎi)為它而設(shè)計(jì)的處理器,或者,對(duì)Transputer有足夠的興趣以采納它作為與眾不同的語(yǔ)言。這聽(tīng)起來(lái)很像一次宗教對(duì) 話(huà)。 英特爾公司的432被設(shè)計(jì)為執(zhí)行Ada,Ada在更為一般的意義上說(shuō)是面向?qū)ο蟮恼Z(yǔ)言。英特爾公司的432可能代表針對(duì)特定HLL處理器的極端 情況,它對(duì)任何語(yǔ)言均無(wú)法實(shí)現(xiàn)足夠的性能,包括用來(lái)設(shè)計(jì)它的Ada語(yǔ)言。實(shí)際上,英特爾公司的432微處理器整個(gè)冗長(zhǎng)的故事一直遭受設(shè)計(jì)錯(cuò)誤的折磨。在 [GEH]中引證了一些設(shè)計(jì)錯(cuò)誤,我們發(fā)現(xiàn)它們分別是: —Ada編譯器產(chǎn)生謬誤的指令; 因此,英特爾的432執(zhí)行通用的基準(zhǔn)比Vax 11/780要慢10~26倍,而比8MHz 8086要慢2~23倍。對(duì)于英特爾來(lái)說(shuō),幸運(yùn)的是,x86處理器以及用于IBM PC的接任者的演化取得了成功,從而讓英特爾的432完全消失,它已經(jīng)被當(dāng)今大多數(shù)的計(jì)算從業(yè)者所遺忘。 Java: 最新注定要失敗的努力 針對(duì)特定處理器的最后劫掠一直就在當(dāng)今的嵌入式時(shí)代,利用由Sun、ARM以及其它供應(yīng)商設(shè)計(jì)的特殊硬件來(lái)執(zhí)行Java(Sun公司的 picoJava處理器以及ARM公司的Jazelle處理器等等)。這些針對(duì)Java的處理器鼓動(dòng)起一些興趣,但是,并未激發(fā)狂熱。在當(dāng)代的嵌入式世界 中,設(shè)計(jì)工程師為了陳述Java應(yīng)用,在傳統(tǒng)的高性能處理器以及即時(shí)(JIT)編譯上解釋Java已經(jīng)被證明是更加引人興趣的路線(xiàn)。此外,在嵌入式處理器 性能上的持續(xù)改善常常證明對(duì)于在嵌入式產(chǎn)品中的許多Java應(yīng)用來(lái)說(shuō)是相當(dāng)足夠的,這些應(yīng)用主要是面向控制和用戶(hù)界面。如果針對(duì)特定語(yǔ)言的處理器路線(xiàn)通過(guò) 四個(gè)計(jì)算時(shí)代已經(jīng)證明它自身就是最令人誤導(dǎo)的方法的話(huà),對(duì)于那些希望利用硬件以超越通用目的處理器的方式加速語(yǔ)言、以及用那些語(yǔ)言編寫(xiě)的應(yīng)用程序的人來(lái) 說(shuō),有什么其它的選項(xiàng)是不受限制的? 要拋棄的第一個(gè)概念一定是“一切關(guān)于語(yǔ)言”這個(gè)概念。的確,對(duì)于數(shù)據(jù)處理加強(qiáng)的應(yīng)用來(lái)說(shuō),它更多的“一切關(guān)于”計(jì)算以及通信內(nèi)核和嵌入在程序中 的算法。如果一個(gè)應(yīng)用程序涉及重復(fù)地執(zhí)行大矢量的標(biāo)量積,那么,對(duì)于不采用具有規(guī)模適當(dāng)?shù)挠布朔ㄆ骰蛘吒玫某朔?累加器(MAC)單元的處理器來(lái)說(shuō), 不論采用Fortran、Ada、C、Java、Basic或是COBOL編寫(xiě)的程序來(lái)執(zhí)行這一應(yīng)用,其速度均會(huì)很慢。如果對(duì)于所采用的語(yǔ)言來(lái)說(shuō),處理器 具有合適功能的單元和良好HLL編譯器(或解釋器),那么,以這些語(yǔ)言當(dāng)中的任何一種表達(dá)的算法應(yīng)該執(zhí)行得相當(dāng)快速,不論采用什么語(yǔ)言。 正是算法的特征—而不是語(yǔ)言的特征—被用于設(shè)計(jì)、修改或選擇正確的處理器。對(duì)于這一應(yīng)用,你或者可以搜尋一種具有乘法器或MAC單元的處理器 (和或零開(kāi)銷(xiāo)的循環(huán))—DSP可能是良好的選擇,或者—甚至更好的—你可以采用指令集擴(kuò)展以裁剪一個(gè)可配置的處理器內(nèi)核,使之更為精確地滿(mǎn)足應(yīng)用的性能和 通信要求。在這種意義上說(shuō),搜尋一種針對(duì)特定HLL的計(jì)算機(jī)架構(gòu)現(xiàn)在可以由搜尋一種面向特定應(yīng)用的指令集處理器(ASIP)來(lái)取代。 注釋*:本系列文章以“Processor Design: System-On-Chip Computing for ASICs and FPGAs, Jari Nurmi (editor), Springer, June 2007. ”一書(shū)的其中一章為基礎(chǔ)。 注釋1:作者之一Grant Martin為Burroughs工作。在這篇系列文章中一再采用E-mode機(jī)作為例子,可以被視為對(duì)令人感興趣的那個(gè)時(shí)代的有點(diǎn)懷舊和充滿(mǎn)深情的回憶。 參考文獻(xiàn): [CHU] Yaohan Chu 編,High-Level Language Computer Architecture,Academic Press, 紐約, 1975 |