近年來,國內(nèi)IC設(shè)計(jì)廠商層出不窮。有龍芯、飛騰、申威等老牌設(shè)計(jì)單位,也有兆芯、宏芯這些新秀,還有在商業(yè)上非常成功的海思、展訊等ARM陣營廠商。但在性能上Intel對各路國產(chǎn)始終保持著巨大的優(yōu)勢,那么國產(chǎn)芯片和Intel的芯片差距在哪里呢?
如何評價(jià)各家的CPU性能?
作為消費(fèi)者來說,自然是希望CPU能盡可能的便宜,而性能經(jīng)可能高。那么,什么樣的CPU性能高呢?從體系結(jié)構(gòu)的角度來看,有個(gè)指標(biāo)叫MIPS,即每分鐘執(zhí)行多少條指令,執(zhí)行指令數(shù)量越多,性能就越好,但這存在一個(gè)問題,當(dāng)CPU指令集不同的時(shí)候,比較MIPS就意義不大了——比如A一條指令只算一個(gè)加法,B一條指令能做一個(gè)1024點(diǎn)的FFT。特別是在不同指令集的情況下,如何評價(jià)各家的CPU性能呢?
評價(jià)CPU性能必須考慮應(yīng)用的多樣性,比如科學(xué)運(yùn)算重視雙精浮點(diǎn)性能,但是如果數(shù)據(jù)供不上,運(yùn)算能力再強(qiáng)也沒用;比如PC日常使用更偏重于整數(shù)性能;再比如計(jì)算中心多任務(wù)環(huán)境關(guān)注的是吞吐率......因此單純用某一個(gè)指標(biāo)來衡量CPU性能是不科學(xué)的,必須綜合考量。
業(yè)界也推出了很多基準(zhǔn)測試程序,比如針對CPU的SPEC,針對嵌入式應(yīng)用的EEMBC等。SPEC測試是比較權(quán)威的測試程序,和一些黑箱測試程序不同,SPEC測試的各項(xiàng)程序跑分和計(jì)分方式全部公開透明,而且覆蓋范圍廣——SPEC2000有12個(gè)定點(diǎn)程序,14個(gè)浮點(diǎn)程序,而且有比較強(qiáng)的代表性,比如gzip、vpr、gcc、mef、eon等。
什么是SPEC測試?
SPEC在計(jì)分上采用歸一化的幾何平均方法來進(jìn)行綜合性能評估——將不同CPU的執(zhí)行時(shí)間與參照對象相比較后得到一個(gè)相對值。
SEPC2000的參照對象是Ultra SPARC 2工作站的主頻為300Mhz的CPU。如果運(yùn)行測試程序1的時(shí)間是參照對象的十分之一的話,測試就是1000分,測試程序2的耗時(shí)是參照對象的八分之一的話,則為800分.....最后再算幾何平均——比如SEPC2000有12個(gè)定點(diǎn)測試,就將12個(gè)測試成績相乘再開12次方,這樣以來,測試更加重視性能均衡,因?yàn)槿绻骋豁?xiàng)測試存在短板的話,將會(huì)大幅拉低測試最后得分,最極端的情況是某項(xiàng)測試為0分,哪怕其他測試分?jǐn)?shù)再高,總分也是0分。
不過SPEC也非盡善盡美,存在不考察I/O帶寬和跑分容易受編譯器影響等問題。
例來說,龍芯上一代微結(jié)構(gòu)曾因存在訪存問題而導(dǎo)致其在SPEC2000下跑分尚可,但在SPEC2006的跑較低,而GS464E解決訪存問題后,則不存在這個(gè)問題,原因就在于SPEC2000對I/O帶寬的要求較低。編譯器方面,SUN曾經(jīng)通過編譯器優(yōu)化提升SPEC跑分50%,龍芯上一代產(chǎn)品用LCC編譯器,比使用GCC整數(shù)跑分提升了60%。即使同樣使用GCC編譯器,也會(huì)因?yàn)椴煌姹?,或?yōu)化程度差異導(dǎo)致很難有最準(zhǔn)確的評價(jià)(GCC部分代碼由Intel提供,對X86優(yōu)化最好,ARM市場份額大,優(yōu)化也不錯(cuò),MIPS、ALPHA的優(yōu)化就比較一般了)。
SPEC測試非常類似于高考,雖然有各種瑕疵,但卻有覆蓋程序廣,公開透明的特點(diǎn),相對來說比較公平,是可以給CPU做一個(gè)相對合理評價(jià)的測試程序。
不同指令集CPU比較
筆者將X86、ARM、MIPS、ALPHA指令集的CPU做了一個(gè)表格如下。
編譯器除龍芯確定是GCC4.8外,其余都是未知數(shù)——VIA的白皮書并沒有標(biāo)明測試中的GCC版本,其余編譯器筆者做一個(gè)推測:申威可能是SWCC;I3 550、I5 4460可能是GCC5.1。因?yàn)閮H僅是筆者猜測,嚴(yán)謹(jǐn)起見,編譯器選擇空白。(ICC是Intel的編譯器,X86芯片都可以用;LCC是龍芯的編譯器;SWCC是申威的編譯器。Intel和AMD的芯片是作參照)
從表中可以看出,使用GCC編譯器的情況下,兆芯、申威、飛騰SEPC2000測試和Intel haswell依舊有相當(dāng)差距,spec2000測試分值最高的GS464E也僅僅是使用自家的LCC編譯器的情況下,整數(shù)和Nehalem差50分,浮點(diǎn)和haswell差70分。而在主頻方面,國內(nèi)IC設(shè)計(jì)公司最高主頻僅為2G,和Intel、AMD 3G以上主頻差距明顯。
因此,國產(chǎn)CPU和Intel的差距,不僅僅是主頻上的。哪怕兆芯的ZX-C能到達(dá)3G以上主頻,但因?yàn)槲⒔Y(jié)構(gòu)上的差距,依舊只有I5 4660性能的40%左右,因此微結(jié)構(gòu)非常重要,可以說CPU的安全性、性能、功耗很大程度上取決于微結(jié)構(gòu),AMD的CPU在同主頻下性能遜色于Intel,很大程度上也是因?yàn)槲⒔Y(jié)構(gòu)上的差距。
而在消費(fèi)者購買CPU時(shí),往往只關(guān)注主頻、核心數(shù)、制程等參數(shù),對微結(jié)構(gòu)往往會(huì)忽略,加上Intel這些年從SNB開始擠牙膏,使得微結(jié)構(gòu)更新對性能的提升非常小,導(dǎo)致微結(jié)構(gòu)的重要性更加被忽視。
微結(jié)構(gòu)差距的原因
因?yàn)楹晷尽⒄仔?、海思、展訊目前并沒有自主設(shè)計(jì)的微結(jié)構(gòu),就以龍芯、飛騰最新的兩款產(chǎn)品和Intel做比較。以GS464E和IVY的差距而言,通過對比下表參數(shù),就能發(fā)現(xiàn)原因。
如果將GS464E和IVY做對比就能發(fā)現(xiàn),制約GS464E性能的最大的短板在定點(diǎn)發(fā)射隊(duì)列和浮點(diǎn)發(fā)射隊(duì)列上,相對于IVY的54項(xiàng)定點(diǎn)和浮點(diǎn)發(fā)射隊(duì)列,GS464E只有16項(xiàng)定點(diǎn)發(fā)射隊(duì)列,24項(xiàng)浮點(diǎn)發(fā)射隊(duì)列。
龍芯對此也是心知肚明,將正在流片的3A3000,針對GS464E的瓶頸做了改進(jìn),將定點(diǎn)發(fā)射隊(duì)列從16項(xiàng)提升到32項(xiàng),將浮點(diǎn)發(fā)射隊(duì)列從24項(xiàng)提升到32項(xiàng),并提升了緩存和主頻。很顯然,雖然龍芯宣稱TICK-TOCK,但3A3000相對于3A2000并非單純的提升主頻,定點(diǎn)發(fā)射隊(duì)列和浮點(diǎn)發(fā)射隊(duì)列的提升必然帶來IPC的提升。
根據(jù)飛騰公布的Spec 2006的模擬器測試,整數(shù)為9.6/G。
9.6/G到底是什么水平呢?筆者以Intel作參照,關(guān)auto parallel的情況下,haswell 使用GCC5.1 的SPEC 2006的成績?yōu)?2分(@3.2G主頻)。也就是說,“小米”能接近haswell?
這實(shí)在是太“驚悚”了,如果真能做到,就是科技大躍進(jìn)了。那SPEC2006整數(shù)9.6/G的原因何在?根源在于開/關(guān)auto parallel。
開auto parallel會(huì)導(dǎo)致SEPC2006整數(shù)分?jǐn)?shù)增益,因?yàn)槠鋵⒃締尉€程執(zhí)行的程序并行化給多個(gè)處理器執(zhí)行,增益效果取決于編譯器、CPU的核心數(shù)量等因素。而相當(dāng)部分常用的代碼并不支持auto parallel。因此,目前auto parallel對SPEC跑分更有意義。而“小米”SPEC2006整數(shù)高達(dá)9.6/G,很有可能就是因?yàn)樵跍y試中開auto parallel的結(jié)果,那么證據(jù)呢?
從上表中“小米”和IVY的對比中看,“小米”和IVY還是有不小的差距的,并且和GS464E一樣存在定點(diǎn)發(fā)射隊(duì)列和浮點(diǎn)發(fā)射隊(duì)列相對IVY偏少的現(xiàn)狀,因此在資源有限的情況下,做出達(dá)到haswell水平的概率非常小。
對比“小米”和GS464E,假定兩者流水線效率相當(dāng)?shù)那闆r下,筆者認(rèn)為“小米”可能是和GS464E一個(gè)等級的微結(jié)構(gòu),并強(qiáng)于ARM Cortex A57。當(dāng)然,如果流水線效率不佳,“小米”也可能會(huì)遜色于GS464E。而“小米”32M的L2緩存,很有可能是因?yàn)獒槍Ψ?wù)器,甚至高性能計(jì)算的產(chǎn)物。
目前,飛騰的“地球”和龍芯3A3000正在流片,期待“地球”和3A3000流片歸來后的表現(xiàn)。