最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

考古20年前的國產(chǎn)CPU:方舟一號和龍芯一號

2021-05-16 02:23 作者:gueenet  | 我要投稿

  20年前,準(zhǔn)確地說是2001年7月和2002年9月,嵌入式CPU“方舟一號”和通用CPU“龍芯一號”相繼發(fā)布,分別在嵌入式和通用CPU領(lǐng)域結(jié)束了我國無芯歷史。方舟一號設(shè)計(jì)用途是網(wǎng)絡(luò)通信處理器,因?yàn)闊o需軟件生態(tài),也不追求通用性能,所以自己設(shè)計(jì)了指令集。龍芯一號的目標(biāo)是桌面計(jì)算機(jī),軟件生態(tài)很重要,各種各樣的應(yīng)用軟件更需要CPU具有均衡的通用性能,于是采用了當(dāng)時(shí)在高性能服務(wù)器中使用較多的MIPS III指令集。

  這兩款CPU在不同的領(lǐng)域代表著我國自主CPU的第一步,承載著一段歷史,承載著發(fā)展自主CPU技術(shù)的希望。但我更感興趣的是它們的技術(shù)特點(diǎn)和差異,想要弄明白為什么方舟一號分明誕生得更早,但結(jié)束“只能使用進(jìn)口CPU制造計(jì)算的歷史”的卻是龍芯一號。人云亦云不是我的風(fēng)格,我的疑惑只能自己解決。這兩款CPU太老了,資料很難查找,但我還是成功收集到了足夠的信息,終于弄明白了這個(gè)問題。

  下面我先把它們的一些參數(shù)列一個(gè)表格,然后再細(xì)細(xì)說明它們的特點(diǎn)和差異。

方舟一號和龍芯一號的參數(shù)對比

  兩者封裝大小差不多,但方舟一號的管腳數(shù)量更多,這是因?yàn)樗乔度胧皆O(shè)計(jì),許多的設(shè)備管理功能都集成在芯片內(nèi)部,更多的引腳可以直聯(lián)更多類型的的外部設(shè)備和低速總線。龍芯一號因?yàn)橹瞥滔鄬ο冗M(jìn)一些,并且作為通用CPU不需在芯片內(nèi)部集成各種附加功能,頻率更高反而功耗更低。緩存大小兩者一樣,功耗也差不多,整數(shù)性能看起來也差不多,那為什么仍然說方舟是嵌入式CPU,而龍芯是通用CPU呢?


  兩者的整數(shù)性能雖然看起來接近,但實(shí)際的評價(jià)標(biāo)準(zhǔn)卻不相同。方舟一號是設(shè)計(jì)為處理網(wǎng)絡(luò)數(shù)據(jù)的嵌入式CPU,要求低成本低功耗,因此設(shè)計(jì)十分簡化,比如指令集中沒有包含除法指令,只支持加、減、乘的整數(shù)計(jì)算,除法和余數(shù)計(jì)算都只能用軟件方式處理。所以說方舟一號的200MIPS指標(biāo)是不包含除法的,這在當(dāng)時(shí)也是許多嵌入式CPU都有的特征。方舟一號與當(dāng)時(shí)絕大多數(shù)的嵌入式CPU共有特征還包括不支持硬件浮點(diǎn)運(yùn)算,以及不像通用CPU那樣通過動態(tài)調(diào)度、亂序執(zhí)行、分支預(yù)測等方式來提高程序的運(yùn)行效率。

  后來的方舟二號和一號相比,在設(shè)計(jì)上區(qū)別不大,主要還是通過使用更先進(jìn)的工藝制程,改進(jìn)物理設(shè)計(jì)來提高工作頻率。二號的主頻達(dá)到了400MHz,但指令集仍然只有78條指令。而龍芯一號則完整地實(shí)現(xiàn)了MIPS III的全部指令,在設(shè)計(jì)上也是以通用CPU為目標(biāo)。MIPS架構(gòu)(指令集)的資料比較多,不需要詳細(xì)說明,方舟架構(gòu)的資料很少,我也是偶然從一個(gè)網(wǎng)友那里得到了它的指令集參考手冊。通過對方舟指令集手冊的閱讀,并與龍芯一號進(jìn)行比較,我總算明白了方舟不適合作為通用CPU的原因。

方舟一號、二號;龍芯一號、二號


  首先是特權(quán)等級,方舟架構(gòu)并沒有像通用CPU那樣進(jìn)行特權(quán)指令和用戶指令的區(qū)分,也就是說應(yīng)用軟件可以為所欲為,只有在軟件完全可控的嵌入式環(huán)境中,才可以保證整個(gè)系統(tǒng)的安全性。方舟架構(gòu)雖然分為用戶模式和監(jiān)督模式,但監(jiān)督模式只是用于處理異常和中斷,與安全無關(guān)。龍芯一號除了實(shí)現(xiàn)了MIPS-III中定義的特權(quán)等級之外,還額外地實(shí)現(xiàn)了抵御緩沖區(qū)溢出類攻擊的硬件安全設(shè)計(jì),整個(gè)計(jì)算機(jī)系統(tǒng)的安全具有較高的保障。

  然后是指令集的設(shè)計(jì),為了降低CPU的設(shè)計(jì)復(fù)雜度,減少晶體管數(shù)量,方舟架構(gòu)總共只有78條指令。雖然遠(yuǎn)不如通用CPU指令集豐富,但與其它的嵌入式CPU相比則是同一水平。方舟架構(gòu)也是繼承了RISC思想的典型設(shè)計(jì),指令字長32位,有32個(gè)通用寄存器,內(nèi)存訪問是Load/Store的模式,其它指令的操作數(shù)都來自寄存器和立即數(shù),而不直接訪問內(nèi)存。下圖是方舟指令集參考手冊中的指令列表,從圖中可以看到許多適用于嵌入式而不適用于通用CPU的指令設(shè)計(jì)。

方舟架構(gòu)指令列表


  1. 立即數(shù)(直接寫在代碼中的數(shù)字)加載只支持21bit的無符號數(shù),而沒有加載有符號立即數(shù)據(jù)的指令。有符號數(shù)只能先放在內(nèi)存中,再用Load類指令加載到寄存器,對于有大量立即數(shù)參與的計(jì)算,運(yùn)行效率偏低。

  2. 直接跳轉(zhuǎn)指令支持兩種尋址方式,J指令跳轉(zhuǎn)目標(biāo)地址由21bit有符號立即數(shù)直接指定,這種在代碼中固化絕對地址的跳轉(zhuǎn)方式,只在嵌入式應(yīng)用中才會出現(xiàn)。JA指令的寄存器+偏移量尋址倒是通用處理器中常見的方式,但偏移量只支持10bit無符號數(shù),偏移范圍很小,只有4K(1024<<2)字節(jié)。10bit的范圍是0~1023,僅1K字節(jié)大小,但由于指令字長32bit(4字節(jié)),指令會隱含地把立即數(shù)左移2bit,因此實(shí)際范圍擴(kuò)大了4倍。4K長度可以適用于簡單的嵌入式程序,但桌面程序需要的跳轉(zhuǎn)范圍一般要大得多,如果要適應(yīng)復(fù)雜的桌面應(yīng)用程序,就需要接力跳轉(zhuǎn)。

  3. Branch類是分支跳轉(zhuǎn)指令,也就是根據(jù)大于、小于等各種條件跳轉(zhuǎn)到不同的代碼分支。但跳轉(zhuǎn)的偏移范圍是用10bit的有符號立即數(shù)表示的,有效范圍是±2K字節(jié)(512<<2),對于桌面應(yīng)用程序來說這個(gè)跳轉(zhuǎn)偏移范圍太小了。MIPS III的分支跳轉(zhuǎn)范圍是16bit有符號數(shù),范圍是±128K字節(jié),對于20年前的應(yīng)用程序還夠用,到了現(xiàn)在就成了影響程序性能的因素之一。

  4. 方舟架構(gòu)的整數(shù)運(yùn)算指令只有4個(gè),其中加法分為寄存器加寄存器和寄存器加立即數(shù)兩條指令,乘法和減法各一條,沒有支持立即數(shù)的格式。實(shí)際程序中有大量的使用固定數(shù)字參與計(jì)算的表達(dá)式,在方舟架構(gòu)以及其它類似架構(gòu)的CPU上,就需要從內(nèi)存中把數(shù)字讀入寄存器再進(jìn)行計(jì)算,比常見的通用CPU要多花費(fèi)一條指令。而且沒有除法指令,所有的除法和余數(shù)計(jì)算都要使用軟件方式來處理,比如最簡單的軟件除法就是用被除數(shù)減去除數(shù),把結(jié)果再賦值給被除數(shù),在循環(huán)中統(tǒng)計(jì)減了多少次之后結(jié)果為負(fù)數(shù),次數(shù)減一就是商。雖然算法很簡單,但完成這樣一次循環(huán)至少需要十幾條指令,循環(huán)多少次需要執(zhí)行的指令數(shù)就翻多少倍,而硬件除法只需要一條指令。雖然可以優(yōu)化軟件除法的代碼,但仍然會遠(yuǎn)遠(yuǎn)低于硬件指令的效率。在簡單的嵌入式程序中這種效率是可以接受的,不過如果與通用CPU相比,即使80286這樣古老的CPU,也是有硬件除法指令的。在當(dāng)時(shí),不只是方舟,還有許多同類的嵌入式CPU也是這樣的設(shè)計(jì)。

  5. 缺少浮點(diǎn)指令,這也是當(dāng)時(shí)各種嵌入式CPU的共同點(diǎn)。因?yàn)椴恢С只镜母↑c(diǎn)加減乘除,那么更高級的三角函數(shù)、對數(shù)、指數(shù)等各種與浮點(diǎn)計(jì)算相關(guān)的指令也是不存在的。缺少硬件浮點(diǎn)計(jì)算的能力對于嵌入式CPU不是問題,無論是路由器、交換機(jī)這類網(wǎng)絡(luò)通信設(shè)備,還是電子詞典、學(xué)習(xí)機(jī)這樣的消費(fèi)產(chǎn)品,都不需要進(jìn)行大量浮點(diǎn)計(jì)算,使用軟件浮點(diǎn)就能滿足要求。但在2000年之后,沒有硬件浮點(diǎn)的CPU已經(jīng)不可能用于通用計(jì)算設(shè)備,即使386都可以額外配置387浮點(diǎn)協(xié)處理器,486的滿血版本已內(nèi)置了浮點(diǎn)單元,何況當(dāng)時(shí)已經(jīng)進(jìn)入了Pentium 4的時(shí)代,桌面環(huán)境中大量的圖形圖像計(jì)算都非??简?yàn)CPU浮點(diǎn)計(jì)算的能力。在Linux命令行下工作的專業(yè)軟件雖然不需要軟件界面,但在科研領(lǐng)域?qū)Ω↑c(diǎn)計(jì)算的性能要求卻遠(yuǎn)高于普通的桌面軟件,作為通用處理器的龍芯一號雖然有不弱的硬件浮點(diǎn)性能,但事實(shí)上也滿足不了當(dāng)時(shí)對CPU性能的要求,畢竟龍芯一號只有相當(dāng)于Pentium 2的性能,與當(dāng)時(shí)Intel最高性能CPU差距極大。

  6. 方舟架構(gòu)的其它指令在當(dāng)時(shí)也同樣都只能適用于嵌入式應(yīng)用場景,主要是指令的數(shù)量太少,有許多較復(fù)雜的計(jì)算必須分拆成多條指令來執(zhí)行,無法高效地運(yùn)行通用應(yīng)用程序。只是單從指令集分析,我無法確切知道方舟一號與龍芯一號的性能差距。其實(shí)把它們倆放在一起對比性能是不公平的,因?yàn)榉街垡惶柋旧砭褪菫榍度胧綉?yīng)用而設(shè)計(jì),并不擅長通用計(jì)算,假如測試程序中有大量除法和浮點(diǎn)計(jì)算,或者邏輯比較復(fù)雜有大量的條件判斷和分支跳轉(zhuǎn),方舟的弱勢就會非常明顯。

  7. 方舟一號除了在指令集方面不能承載通用應(yīng)用,在CPU的設(shè)計(jì)上也盡量簡化,比如龍芯一號中那些現(xiàn)代通用CPU的特征,方舟一號就沒有。但方舟一號屬于嵌入式CPU的大量特征也是龍芯一號沒有的,比如SoC擴(kuò)展能力、功耗管理單元、定時(shí)器單元、片上系統(tǒng)總線和設(shè)備總線等等,都表現(xiàn)出方舟一號是一款設(shè)計(jì)成熟的嵌入式CPU,能夠滿足當(dāng)時(shí)國內(nèi)對嵌入式CPU的大部分要求。

  一年半之后的方舟二號也使用了0.18um的制程,通過更好的工藝和改進(jìn)的設(shè)計(jì)把功耗降低了四分之三,也就是300mW的樣子,頻率則達(dá)到了400MHz,加上把指令緩存和數(shù)據(jù)緩存增加一倍,CPU整體性能估計(jì)應(yīng)是方舟一號的2.5倍左右。這與方舟架構(gòu)參考手冊中提到的目標(biāo)相符:“The instruction set was designed to allow a very small with very low power consumption, yet highperformance implementation. ”——該指令集的設(shè)計(jì)允許一個(gè)非常小、功耗非常低但性能很高的實(shí)現(xiàn)。只可惜方舟3號沒有繼續(xù)完成,方舟的領(lǐng)頭人自己放棄了,沒有堅(jiān)持到底!??!

方舟NC客戶端主板


  從資料中我明白了方舟系列CPU確實(shí)是專為嵌入式應(yīng)用而設(shè)計(jì),無法作為通用CPU使用。而龍芯一號無論是指令集還是結(jié)構(gòu)設(shè)計(jì),都是以通用CPU為目標(biāo),雖然性能只相當(dāng)于Pentium 2,但確實(shí)能夠適用于各種應(yīng)用場景,運(yùn)行任何應(yīng)用程序都沒有明顯的短板。能夠用來制造包括PC在內(nèi)的通用計(jì)算設(shè)備,大概就是“通用”的本意。后來的龍芯二號性能達(dá)到了龍芯一號的3~5倍,雖然仍然與當(dāng)時(shí)的主流CPU有很大差距,但在一些對性能要求不高的場合也有了成批量的使用。當(dāng)前龍芯最新型號3A5000的性能已經(jīng)踏進(jìn)了主流CPU的門檻,并使用了自主設(shè)計(jì)的LoongArch架構(gòu)(指令集),龍芯CPU的軟件生態(tài)也在有序發(fā)展,終于堅(jiān)持到了朝陽升起。

龍芯一號研究成功后的相關(guān)報(bào)道


本頁面的文字和圖像允許在CC-BY-SA 3.0協(xié)議四和GNU自由文檔許可證下修改和再使用。


考古20年前的國產(chǎn)CPU:方舟一號和龍芯一號的評論 (共 條)

分享到微博請遵守國家法律
建昌县| 泸定县| 西盟| 无极县| 阳原县| 且末县| 福贡县| 海丰县| 江山市| 玉屏| 鄂州市| 武川县| 聊城市| 焦作市| 祁阳县| 阿图什市| 石河子市| 雅江县| 甘孜县| 武宁县| 师宗县| 三门县| 荣成市| 扎鲁特旗| 广宁县| 女性| 海阳市| 密山市| 红原县| 油尖旺区| 凤山县| 江永县| 鹤峰县| 五华县| 内黄县| 恩施市| 图们市| 青冈县| 泗水县| 西充县| 通山县|