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