“跑分” 這件事,相信各位讀者對此并不陌生?!安环軅€分” 已經(jīng)成為了某些手機(jī)發(fā)布時的保留節(jié)目。對于普通用戶來說,最常用的跑分程序大概就是魯大師和安兔兔了。安裝一個程序,然后再點幾個按鈕,幾分鐘以后跑分結(jié)果就出來了,整個過程簡單輕松。
如果要跑分的平臺不是運行 Windows 系統(tǒng)的 X86 平臺,也不是運行安卓系統(tǒng)的 ARM 平臺,而是運行國產(chǎn)操作系統(tǒng)的國產(chǎn)處理器平臺,用什么方法來衡量這些平臺上的處理器性能呢?這時,我們可以使用一個重量級的跑分程序 SPEC CPU 2006。
SPEC CPU 2006 包含 12 項整數(shù)測試,17 項浮點測試,共計 29 個測試項目。測試以后會分別根據(jù)每一項的測試成績,用幾何平均算出最終的整數(shù)測試成績和浮點測試成績。根據(jù)編譯選項設(shè)置的不同,可以得到處理器的基礎(chǔ)(base)性能和峰值(peak)性能。對于 SPEC CPU 2006 的具體內(nèi)容,網(wǎng)上已經(jīng)有很多材料了,在此我不做贅述。在IT之家IT號這里,我著重介紹單核 peak 性能的測試。
一、三款國產(chǎn)處理器性能對比
使用 SPEC CPU 2006,我們可以對各種國產(chǎn)處理器的性能做一個評價。這里,我們首先對比三款國產(chǎn)處理器的 SPEC CPU 2006 性能。
飛騰 FT2000-4 處理器沒有官方的 SPEC CPU 2006 性能。網(wǎng)友 yygg100 使用飛騰的內(nèi)部測試配置文件,得到了 FT2000-4 處理器的整數(shù)峰值性能為 23.2 分;遺憾的是,在這個測試中并沒有進(jìn)行浮點性能的測試,該網(wǎng)友也沒有提供配置文件的細(xì)節(jié)。這個成績已經(jīng)初步實現(xiàn)了飛騰在 2016 年的規(guī)劃,即到 2018 年 SPEC CPU 2006 性能達(dá)到 20~30 分。
兆芯則直接在官網(wǎng)上公開了處理器的性能,目前 KX-6000 的性能為 3GHz 下單核整數(shù)性能 29.2 分,浮點性能則高達(dá) 38 分。由于兆芯處理器采用 X86 指令集,在進(jìn)行性能測試的時候兆芯可以使用 Intel 編譯器來獲得最高性能,這也是兆芯的生態(tài)優(yōu)勢之一。
龍芯 3A4000,采用 28nm 工藝,主頻 2.0 GHz 下,單核 peak 整數(shù)性能 21.1 分,浮點性能 21.2 分;單核 base 整數(shù) 19.1 分,浮點 18.7 分。我在去年試圖復(fù)現(xiàn)這個成績,沒有成功,即使超頻到 2.15GHz 的情況下,最終的成績也沒有超過 20 分,深感遺憾。現(xiàn)在我想再試一下,以正視聽。
圖 1 三款國產(chǎn)處理器的單核性能對比
二、影響處理器性能的因素
在性能評測中,影響性能的因素有很多,簡單的講可以概括為以下幾個個部分:
處理器核的設(shè)計水平。處理器核的性能是決定處理器性能的最關(guān)鍵因素。在相同的主頻下,使用高效處理器核的處理器性能更好。
處理器主頻。采用同樣的處理器核,更高的處理器主頻能夠有更好的性能。優(yōu)秀的制造工藝能夠顯著提高處理器的主頻。比如,同樣采用 FT663 內(nèi)核,采用 40nm 工藝的飛騰 FT2000-2 處理器主頻只有 1.0 GHz,而采用 16/14 nm 工藝的 FT2000-4 處理器主頻高達(dá) 2.6 GHz。采用優(yōu)秀的物理設(shè)計,也能夠顯著提高處理器的主頻,比如龍芯 3A3000 處理器和龍芯 3A4000 處理器都采用 28 nm 工藝流片,前者主頻只有 1.5 GHz,而后者的主頻提高到了 2.0 GHz。
處理器的緩存大小。眾所周知,Intel 的處理器閹割緩存以后就變成了奔騰。更大的處理器緩存,有助于提高處理器的性能。比如,龍芯 3A2000 處理器共享 3 級緩存為 4M,龍芯 3A3000 處理器的共享三級緩存提高到了 8M,使得 3A3000 處理器的性能有了更多提升。
內(nèi)存的訪存速度。有部分應(yīng)用是訪存密集型的,對這些應(yīng)用來說,提高內(nèi)存的訪存性能能夠有效提高處理器性能。影響內(nèi)存性能的因素有內(nèi)存的頻率、內(nèi)存通道的數(shù)目。如果主板上有多個處理器,還需要考慮每個處理器和內(nèi)存的距離。
編譯器和編譯選項。優(yōu)秀的編譯器,加上與應(yīng)用特征匹配的編譯選項,能夠顯著提高計算的性能。在 Intel 平臺上,要全面發(fā)揮處理器的性能,最佳選擇是使用 Intel 編譯器;如果使用開源的 GCC 編譯器,往往不能充分發(fā)揮處理器的能力。比如,兆芯 KX6000 處理器 SPEC CPU 2006 峰值性能整數(shù) 29.2 分,浮點 38 分,就是使用 Intel 編譯器測出來的。此外,還有大量的編譯選項提高二進(jìn)制文件性能,選擇合適的編譯選項是提高性能的重要手段。比如,對于支持 avx 指令的處理器,在使用 GCC 進(jìn)行編譯的時候開啟 - mavx 選項,可能會顯著提高程序的性能。
操作系統(tǒng)內(nèi)核。過于古老的操作系統(tǒng)內(nèi)核可能無法很好的支持新處理器的特性。如果操作系統(tǒng)內(nèi)核編譯的時候沒有設(shè)定正確的選項,也可能無法支持新的處理器特性。以龍芯處理器為例,龍芯 3A4000 處理器增加了 MSA 指令,支持 128 位向量操作,如果操作系統(tǒng)內(nèi)核不支持 MSA,那么所有啟用了 MSA 指令的二進(jìn)制文件都無法正常運行,也就無法發(fā)揮處理器的性能。
程序運行依賴的底層函數(shù)庫。程序運行依賴的 libc 庫和 libm 庫,對處理器性能的發(fā)揮也有影響。高性能的數(shù)學(xué)庫能夠加快底層數(shù)學(xué)函數(shù)的計算,提高計算性能。如果是進(jìn)行矩陣運算、信號處理,那么高性能的 BLAS、LAPACK 庫、FFT 庫也能提高程序的運算速度。
三、龍芯 3A4000 處理器的 SPEC CPU 2006 性能調(diào)優(yōu)
在對龍芯 3A4000 進(jìn)行性能測試的時候,我測試了操作系統(tǒng)內(nèi)核、內(nèi)存性能、主頻、編譯選項等對操作系統(tǒng)性能的影響。
1. 編譯器優(yōu)化選項
首先,我考察了編譯器的各種優(yōu)化選項對性能的影響。此時,我的測試環(huán)境是龍芯 3A4000 處理器,主頻 1.8GHz, 配單根 8GB 2400MT/s 內(nèi)存條。操作系統(tǒng)為龍夢 Fedora 28,內(nèi)核版本為 5.4.60,編譯器版本為 GCC 8.4。我簡單嘗試了 O2、O3、Ofast 三個優(yōu)化選項,得到的 SPEC CPU 2006 性能如圖 2 所示。
圖 2 采用 O2、O3、Ofast 選項時的處理器性能對比
這個性能看起來實在是不怎么樣。從 O2 到 O3 再到 Ofast,程序的性能有些許的提升,但距離龍芯官方生成的 20 分還差的很遠(yuǎn)。接下來,我們可以通過進(jìn)一步編譯器參數(shù)來對處理器的性能進(jìn)行優(yōu)化。我采用的主要編譯器參數(shù)和作用如下表所示。
編譯器參數(shù) | 作用 |
-march=loongson3a | 開啟針對龍芯 3A 處理器的優(yōu)化 |
-mabi=n32 | 使用 N32 的 ABI |
-funroll-all-loops | 循環(huán)展開 |
-mmsa | 使用 MIPS SIMD 指令 |
-flto | 開啟鏈接時優(yōu)化 |
-ftree-parallelize-loops | 開啟自動并行 |
-fprofile-generate, -fprofile-use | 使用 profile guided optimization |
對每個測試項目的編譯參數(shù),都進(jìn)行了調(diào)整,最終得到的 peak 性能分?jǐn)?shù)提高到了整數(shù) 18.09 分,浮點 17.64 分,相對于僅使用 Ofast 參數(shù)的性能分別提高了 34% 和 24%。圖 3~ 4 對比了只使用 Ofast 參數(shù)的性能和 peak 性能的對比。
圖 4 peak 性能和僅采用 Ofast 選項的性能對比
從測試的結(jié)果看,僅僅依靠編譯選項的調(diào)整,就可以大幅提高應(yīng)用程序運行的速度。對于部分測試的性能,甚至有數(shù)倍的性能提升。比如,456.hmmer 測試項目的分?jǐn)?shù)從 11.7 分提高到 27.4 分,性能是之前的 2.3 倍,這主要是因為啟用了 MIPS 的 SIMD 指令;436.cactusADM 測試項目的分?jǐn)?shù)從 2.5 分提高到 7.3 分,性能是之前的 2.9 倍。
2. 操作系統(tǒng)內(nèi)核的選擇
除了編譯選項的調(diào)整,操作系統(tǒng)內(nèi)核也對應(yīng)用程序的性能有著非常大的影響。采用同樣的編譯選項,我分別使用 Fedora 28 的 5.4.60 內(nèi)核以及龍芯提供的 4.19.161 內(nèi)核進(jìn)行了性能測試。使用 4.19.161 內(nèi)核,進(jìn)一步提升了程序的性能,整數(shù) / 浮點性能分別從 18.09 分 /17.64 分,提高到了 18.8 分 / 19.92 分,性能的提升分別為 4% 和 13%。
如圖 5 所示,429.mcf 性能從 20.56 分提高到了 24.9 分,性能提高了 21%。而性能提升最為明顯的項目是 436.cactusADM,分?jǐn)?shù)從 7.3 分提高到了 44.9 分,性能暴漲到原來的 6.15 倍,簡直像開掛了一樣。這也表明龍芯公司在操作系統(tǒng)內(nèi)核的優(yōu)化上,也做了很多工作。
圖 5 操作系統(tǒng)內(nèi)核對性能的影響
3. 內(nèi)存性能
進(jìn)一步,我對比了內(nèi)存性能對系統(tǒng)性能的影響。當(dāng)系統(tǒng)增加一根內(nèi)存條,組成雙通道以后,整體的性能再次提升,整數(shù) / 浮點性能分別提升到了 19.60 分和 20.99 分,相比之前的測試分別又提高了 4.3% 和 5.5%。其中,性能提升較大的項目如圖 6 所示。很明顯,這些項目也是訪存密集型的。在對內(nèi)存性能進(jìn)行調(diào)優(yōu)以后,1.8 GHz 主頻的龍芯 3A4000 處理器的浮點性能已經(jīng)超過了 20 分。
從測試的結(jié)果也可以看出,462.libquantum 測試對訪存性能非常敏感,將內(nèi)存從單通道升級到雙通道,性能提升了 66%。
圖 6 內(nèi)存對性能的影響
4. 處理器主頻
以上的測試都是在 1.8 GHz 主頻下完成的。實際上,龍芯 3A4000 處理器睿頻頻率可以到 2.0 GHz。而使用龍芯內(nèi)核開發(fā)者 flygoat 提供的龍夢 A1901 主板內(nèi)核超頻補丁,還可以進(jìn)一步提升龍芯 3A4000 處理器的主頻到 2.2 GHz。
提高主頻的話,龍芯 3A4000 處理器的性能究竟可以提升到什么程度?從下圖 7 可以看出,在 2.0GHz 主頻下,整數(shù)性能和浮點性能分別為 21.3 分和 22.9 分,這已經(jīng)超過了龍芯官方提供的整數(shù) 21.1 分、浮點 21.2 分的 peak 性能。我所測試的 A1901 主板,3A4000 處理器可以穩(wěn)定在 2.1GHz 主頻下,在此主頻下整數(shù)性能和浮點性能分別為 22.2 分和 23.8 分。
圖 7 不同主頻下龍芯 3A4000 處理器的性能
然而,這并非是龍芯 3A400 處理器的性能極限。我在測試中使用的是 GCC 8.4 編譯器,其中對龍芯 3A4000 中指令的支持并不完善。比如,龍芯 3A4000 中實現(xiàn)了 256 位向量操作指令 LASX,但我在跑分的時候只用到了 128 位的向量操作指令 MSA。如果編譯器中的編譯選項對龍芯處理器進(jìn)行了深度的調(diào)優(yōu),整個系統(tǒng)的性能還有進(jìn)一步提升的空間。
經(jīng)過上述的測試,我對系統(tǒng)的硬件、軟件等方面進(jìn)行了多種調(diào)優(yōu),通過優(yōu)化編譯器選項、操作系統(tǒng)內(nèi)核、內(nèi)存性能,以及對處理器的超頻,將 SPEC CPU 2006 的性能從最初的整數(shù) 13.1 分、浮點 12.2 分,提高到了最終的整數(shù) 22.2 分、浮點 23.8 分(2.1 GHz)。這些優(yōu)化的經(jīng)驗,對于類似的系統(tǒng)同樣適用。
四、針尖對麥芒:飛騰 FT2000/4 vs 龍芯 3A4000 處理器
我們了解了龍芯 3A4000 處理器的性能,那么和友商的飛騰 FT2000-4 處理器相比,龍芯 3A4000 的差距有多大呢?
項目 | 龍芯 3A4000 | 飛騰 2000-4 |
處理器核 | GS464V | FTC663 |
指令集 | LoongISA | ARM V8 |
處理器核數(shù) | 4 | 4 |
處理器主頻 | 2.0 | 2.6 |
工藝 | 28nm | 14nm |
功耗 | 30~50W | 10~15W |
內(nèi)存控制器 | DDR4 最高 2400MT/s | DDR4 最高 3200MT/s |
可以看出,采用先進(jìn)工藝的 FT2000-4 處理器在主頻和功耗上大幅領(lǐng)先龍芯 3A4000 處理器。那么處理器的真實性能有多大的差距呢?最近,貼吧網(wǎng)友 yygg100 對 FT2000 處理器的 SPEC CPU 2006 的 peak 性能進(jìn)行了測試,得到了在 2.6GHz 主頻下單核 peak 整數(shù)性能 23.2 分的成績。雖然他的測試并不完善,只有整數(shù)性能測試,沒有浮點性能測試的數(shù)據(jù),但這依舊是目前已知的 FT2000 處理器單核性能的最高值。
我們將這個數(shù)據(jù)與龍芯 3A4000 在 2.0GHz 下的性能進(jìn)行了對比,龍芯 3A4000 性能為 21.3 分。由于龍芯處理器工藝落后,主頻較低,主頻只有飛騰處理器的 77%,而整數(shù)性能達(dá)到了飛騰處理器的 92%。
圖 8 龍芯 3A4000 和飛騰 FT2000-4 處理器整數(shù)性能對比。
從圖中可以看出,在 12 項測試中,飛騰處理器在 8 個項目上性能強于龍芯 3A4000,其中 libquantum 這一項的性能差距最大,龍芯處理器性能只有 FT2000 的 58%,因為飛騰處理器不僅主頻較高,而且內(nèi)存頻率為 2666MT/s,相比龍芯 3A4000 的 2400MT/s 有明顯的優(yōu)勢。
而在 429.mcf,445.gobmk,456.hmmer, 458.sjeng 這 4 個項目上,2.6 GHz 的飛騰 2000 處理器性能弱于 2.0 GHz 的 3A4000 處理器。隨著龍芯 3A5000 處理器的上市,飛騰 2000 處理器的單核性能領(lǐng)先優(yōu)勢將會逐漸消失。
五、對龍芯 3A5000 的展望
龍芯 3A5000 處理器已經(jīng)流片,很快就要發(fā)布了。龍芯 3A5000 處理器將采用臺積電 12nm 工藝流片,處理器主頻有望提高到 2.5 GHz 以上,和友商處理器的主頻差距進(jìn)一步縮小。據(jù)稱,龍芯 3A5000 的 SPEC CPU 2006 性能將達(dá)到 25~30 分。
根據(jù)我對龍芯 3A4000 處理器的性能測試,如果把龍芯 3A5000 處理器視為 3A4000 的簡單升級版,僅僅提高主頻,內(nèi)存頻率和緩存都不變,采用圖 7 中的數(shù)據(jù),進(jìn)行一個簡單的數(shù)據(jù)擬合,我預(yù)測龍芯 3A4000 處理器在 2.5 GHz 主頻時 peak 性能約為整數(shù) 25.9 分、浮點 26.7 分。龍芯 3A5000 會將三級緩存大小加倍,提高內(nèi)存的頻率 (有望達(dá)到 3200MT/s),還會進(jìn)一步提升處理器的性能,我們可以假設(shè)有這些調(diào)整可以帶來 5% 的性能提升;龍芯 3A5000 處理器采用了 Loongarch 指令集,擺脫了 MIPS 指令集的歷史包袱,根據(jù)胡偉武研究員的報告,僅僅是指令集的更新,就可以讓性能提升 16.6% 和 9.4%,我們可以保守估計有 9% 的性能提升。龍芯 3A5000 也有望使用真正的 256 位向量指令,而非 MSA 中的 128 位向量,程序運行速度可以進(jìn)一步提高,可以保守估計這能帶來 2% 的性能提升。
根據(jù)上面的計算,我認(rèn)為龍芯 3A5000 處理器的 SPEC CPU 2006 單核 peak 性能可以達(dá)到整數(shù) 30 分、浮點 30 分。屆時,龍芯處理器將在單核性能上追平或趕超其他國產(chǎn)處理器。2021 年下半年,16 核龍芯 3C5000 以及 64 核龍芯 3E5000 的流片,也將提高龍芯處理器的多核性能,有助于龍芯擴(kuò)展服務(wù)器市場。
致謝
本次測試借用了網(wǎng)友 gueenet 的龍芯 3A4000 主機(jī),對他的慷慨和信任我深表感謝!在對內(nèi)核的性能測試中得到了陳華才、flygoat 的指導(dǎo)。對 SPEC CPU 2006 性能的探索,受到了網(wǎng)友 yygg100 所發(fā)視頻的啟發(fā),對他的視頻分享一并表示感謝。封面圖由龍芯吧 Windows1089 提供。
參考資料:
IT之家對 SPEC CPU 感興趣的朋友,可以參考 https://github.com/zevanzhao/loongson-notes 中的文檔,進(jìn)行龍芯平臺下 SPEC CPU 2006 的跑分。
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。