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