新聞中心

EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 處理器設(shè)計(jì)的謬誤(1)

處理器設(shè)計(jì)的謬誤(1)

—— Processor Design Mistakes, Part 1
作者:Grant Martin,Steve Leibson, Tensilica公司 時(shí)間:2008-11-05 來(lái)源:電子產(chǎn)品世界 收藏

  在計(jì)算機(jī)發(fā)展的整個(gè)70年期間,曾經(jīng)出現(xiàn)了各種各樣的分立和嵌入式處理器種群,它們已經(jīng)進(jìn)化,并且有些種群已經(jīng)逐漸消失。從這一進(jìn)化中產(chǎn)生了許多新奇的設(shè)計(jì)。有些新奇的概念繼續(xù)生存,有些幾乎立即消亡,而一些概念僅僅存活了短暫的時(shí)間就銷聲匿跡了,但是,繼承他們基因的技術(shù)在后續(xù)的種群中再次出現(xiàn)。

本文引用地址:http://m.butianyuan.cn/article/89230.htm

  本系列深度分析文章將調(diào)查13種不成功的處理器種群。這些文章探索了造成每一個(gè)處理器種群死亡的主要設(shè)計(jì)錯(cuò)誤。每一個(gè)主要設(shè)計(jì)錯(cuò)誤還用一個(gè)或幾個(gè)例子來(lái)闡述。然而,隨著技術(shù)使得許多老的概念煥發(fā)新生、重塑輝煌并再次成為新概念而獲得無(wú)止境的重復(fù)利用,也許不知什么時(shí)候,勇猛的探索者/設(shè)計(jì)師將接下來(lái)遇見這些處理器種群當(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)題,從接線板編程、撥動(dòng)開關(guān)輸入、機(jī)器語(yǔ)言輸入、匯編語(yǔ)言到整個(gè)一大群“高級(jí)”編程語(yǔ)言(HLL),從上世紀(jì)50年代的Fortran和Cobol,乃至上下半葉研究出來(lái)的幾百或上千種編程語(yǔ)言。

  HLL一被開發(fā)出來(lái),人們就開始擔(dān)心用于捕獲編程問(wèn)題的答案HLL描述與被在目標(biāo)機(jī)上執(zhí)行的由HLL編譯器產(chǎn)生的實(shí)際指令之間的語(yǔ)義差異。每一種編譯器常常產(chǎn)生不好的結(jié)果—有時(shí)候非常糟糕。即使現(xiàn)在,盡管編譯器的開發(fā)經(jīng)歷了50多年,但是,對(duì)于許多算法來(lái)說(shuō),最高技能的人類匯編語(yǔ)言編碼員所獲得的編譯結(jié)果的質(zhì)量,要比由最佳的HLL編程器與最佳的可用最優(yōu)化編譯器所產(chǎn)生的代碼高一個(gè)數(shù)量級(jí)(或一個(gè)數(shù)量級(jí)以上)。

  計(jì)算機(jī)研究人員和商用計(jì)算機(jī)供應(yīng)商不可避免地開始研究根據(jù)特殊的HLL或語(yǔ)言種群調(diào)節(jié)一種特殊處理器的可行性,以期把處理器的指令集與語(yǔ)言的要求更為緊密地匹配起來(lái),并縮小語(yǔ)義差異。其理論就是以那些目標(biāo)HLL編寫的程序應(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)的開創(chuàng)性圖書中可以發(fā)現(xiàn)這是典型的“謬誤和缺陷”之一[HEN, p. 142]。

  這一方法存在的基本問(wèn)題是多方面的:盡管已經(jīng)被調(diào)整為一種語(yǔ)言,但是,處理器可能(而且非常可能將)被用于運(yùn)行于其它語(yǔ)言編寫的程序。經(jīng)調(diào)整的處理器將—因其針對(duì)特定語(yǔ)言的調(diào)整—在運(yùn)行采用這些其它HLL編寫的程序時(shí)效率比較低。

  在較早時(shí)代,硬件資源很少被花費(fèi)在極少被采用的指令的有效執(zhí)行上—這是對(duì)昂貴的架構(gòu)資本的一種劣質(zhì)應(yīng)用。

  因一種HLL構(gòu)造的一些非常特殊的應(yīng)用,針對(duì)特定語(yǔ)言的指令可能終止執(zhí)行,并且對(duì)于典型和最常見的應(yīng)用是沒有用的。因此,對(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)激起了巨大的興趣。研究人員撰寫了幾百或上千的論文,關(guān)于這個(gè)課題的專題研討會(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)和專用的管理子系統(tǒng)采用與Algol 60的直接對(duì)話編寫、并且采用的是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“專注于采用較高級(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)沒有小的部分。要嘗試把針對(duì)特定HLL的指令集擴(kuò)展至較低端的機(jī)器(包括由Burroughs的接任者Unisys在1989年推出的一種單芯片實(shí)現(xiàn)—稱為單芯片A系列主機(jī)處理器(SCAMP) [UNI])需要大量的微碼。遺憾的是,Algol 60從未真正以流行的編程語(yǔ)言起飛。這毫無(wú)疑問(wèn)減少了Burroughs機(jī)的普及程度。

  注釋:關(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的的吸引力,還導(dǎo)致人們開發(fā)直接運(yùn)行用APL [HAS]、Lisp [WHO]、Prolog [FAG]以及其它直接針對(duì)Basic、Fortran、Pascal、PL/I和Snobol [DIT80]編寫的程序的機(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í)代的遷移,見證了上述針對(duì)特定HLL的計(jì)算機(jī)架構(gòu)設(shè)計(jì)方法以Burroughs B1700/1800獲得重復(fù)使用,它為若干語(yǔ)言提供了微碼指令集(COBOL、RPG以及其中的Fortran) [ORG77]和許多專用的工作站級(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];在所有這類微處理器當(dāng)中,也許最為著名(或聲名狼藉)的就是英特爾公司的432,它被設(shè)計(jì)為運(yùn)行以Ada語(yǔ)言編寫的程序[GEH]。Transputer及其Occam描述了一種針對(duì)特定HLL的處理器的功能之一,有時(shí)候,它的開發(fā)者對(duì)于特殊的計(jì)算理論以信奉宗教般或準(zhǔn)宗教般的熱愛投入,從而以奴性的方式證明它自己對(duì)于一種編程語(yǔ)言的奉獻(xiàn),并盡力進(jìn)行實(shí)質(zhì)努力以開發(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)題之一。它的成功高度依賴于找到一個(gè)對(duì)Occam有足夠興趣的市場(chǎng),以購(gòu)買為它而設(shè)計(jì)的處理器,或者,對(duì)Transputer有足夠的興趣以采納它作為與眾不同的語(yǔ)言。這聽起來(lái)很像一次宗教對(duì)話。

  英特爾公司的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)生謬誤的指令;
—Ada編譯器并不執(zhí)行通用的子表達(dá)式消除;
—編譯器由數(shù)值/結(jié)果通過(guò)參數(shù),即使對(duì)于大的陣列(而不是由參考值);
—編譯器總是采用非常慢的模塊間調(diào)用,即使當(dāng)不必要時(shí);
—指令以比特排列,因此,解碼速度慢;
—從字面上看,不允許一個(gè)以上的指令流;
—機(jī)器的程序調(diào)用效率極低—超過(guò)1000個(gè)時(shí)鐘周期,包括282個(gè)等待狀態(tài);相比之下,在那個(gè)時(shí)代的其它處理器采用不到100個(gè)時(shí)鐘周期。

  因此,英特爾的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)被證明是更加引人興趣的路線。此外,在嵌入式處理器性能上的持續(xù)改善常常證明對(duì)于在嵌入式產(chǎn)品中的許多Java應(yīng)用來(lái)說(shuō)是相當(dāng)足夠的,這些應(yīng)用主要是面向控制和用戶界面。如果針對(duì)特定語(yǔ)言的處理器路線通過(guò)四個(gè)計(jì)算時(shí)代已經(jīng)證明它自身就是最令人誤導(dǎo)的方法的話,對(duì)于那些希望利用硬件以超越通用目的處理器的方式加速語(yǔ)言、以及用那些語(yǔ)言編寫的應(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編寫的程序來(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單元的處理器(和或零開銷的循環(huán))—DSP可能是良好的選擇,或者—甚至更好的—你可以采用指令集擴(kuò)展以裁剪一個(gè)可配置的處理器內(nèi)核,使之更為精確地滿足應(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. ”一書的其中一章為基礎(chǔ)。

  注釋1:作者之一Grant Martin為Burroughs工作。在這篇系列文章中一再采用E-mode機(jī)作為例子,可以被視為對(duì)令人感興趣的那個(gè)時(shí)代的有點(diǎn)懷舊和充滿深情的回憶。

參考文獻(xiàn):

[CHU] Yaohan Chu 編,High-Level Language Computer Architecture,Academic Press, 紐約, 1975
[CHU-CAR] 上述[CHU]的第三章,Carl R. Carlson, High-Level Language Computer Architecture
[CHU-DOR] 上述[CHU]的第四章,Robert W. Doran, Architecture of Stack Machines
[DIT80] David R. Ditzel和David A. Patterson, Retrospective on High-Level Language Computer Architecture, Proceedings of the 7th Annual Symposium on Computer Architecture, La Baule, 法國(guó) (1980年6月), pp. 97104
[DIT87a] David R. Ditzel, Hubert R. McLellan和Alan D. Berenbaum, Design Tradeoffs to Support the C Programming Language in the CRISP Microprocessor, ASPLOS 1987, pp. 158163
[DIT87b] David R. Ditzel, Hubert R. McLellan和Alan D. Berenbaum, The Hardware Architecture of the CRISP Microprocessor, Proceedings of the 14th Annual International Symposium on Computer Architecture, Pittsburgh, Pennsylvania, 美國(guó), 1987, pp. 309319
[EAR] E. Dean Earnest, Twenty years of Burroughs high-level language machines, Proceedings of the International Workshop on High-Level Language Computer Architecture, June 1980, pp. 6471
[FAG] Barry Fagin, Yale Patt, Vason Sirni, Alvin Despain, Compiling Prolog into Microcode: A Case Study Using the NCR/32-000, Proceedings of the 18th IEEE Microprogramming Workshop, 1985年12月
[GEH] Edward F. Gehringer and Robert P. Colwell, Fast Object-oriented procedure calls: lessons from the Intel 432, Proceedings of the 13th Annual International Symposium on Computer Architecture, 日本東京, 1986, pp. 92101
[HAS] A. Hassitt, J. W. Lageschulte和L.E. Lyon, Implementation of a High Level Language Machine, Communications of the ACM,1973年4月, Volume 16, Number 4, pp. 199212
[HEN] John L. Hennessy and David A. Patterson, Computer Architecture: A Quantitative Approach, 3rd edition (2003), Elsevier Morgan Kaufmann, 舊金山
[ORG73] E.I. Organick, Computer Systems Organization: The B5700/B6700 Series, Academic Press, 紐約, 1973
[ORG77] Elliott I. Organick, James A. Hinds, Architecture and Programming of the B1700/B1800 Series, North-Holland, 紐約, 1977.
[UNI] Reuters新聞, Unisys Introduces Micro A Computer, 1989年1月19日 URL:http://query.nytimes.com/gst/fullpage.html?res=950DE2DE113AF93AA25752C0A96F948260
[WHO] Skef Wholey和Scott F. Fahlman, The Design of an Instruction Set for Common Lisp, ACM Symposium on LISP and Functional Programming, 1984, pp. 150158



關(guān)鍵詞: 處理器設(shè)計(jì) 200810

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉