1. 程式人生 > 資訊 >超越官方的民間測評:基於 SPEC CPU 2006 的國產龍芯 3A4000 處理器效能評測

超越官方的民間測評:基於 SPEC CPU 2006 的國產龍芯 3A4000 處理器效能評測

“跑分” 這件事,相信各位讀者對此並不陌生。“不服跑個分” 已經成為了某些手機發布時的保留節目。對於普通使用者來說,最常用的跑分程式大概就是魯大師和安兔兔了。安裝一個程式,然後再點幾個按鈕,幾分鐘以後跑分結果就出來了,整個過程簡單輕鬆。

如果要跑分的平臺不是執行 Windows 系統的 X86 平臺,也不是執行安卓系統的 ARM 平臺,而是執行國產作業系統的國產處理器平臺,用什麼方法來衡量這些平臺上的處理器效能呢?這時,我們可以使用一個重量級的跑分程式 SPEC CPU 2006。

SPEC CPU 2006 包含 12 項整數測試,17 項浮點測試,共計 29 個測試專案。測試以後會分別根據每一項的測試成績,用幾何平均算出最終的整數測試成績和浮點測試成績。根據編譯選項設定的不同,可以得到處理器的基礎(base)效能和峰值(peak)效能。對於 SPEC CPU 2006 的具體內容,網上已經有很多材料了,在此我不做贅述。在IT號這裡,我著重介紹單核 peak 效能的測試。

一、三款國產處理器效能對比

使用 SPEC CPU 2006,我們可以對各種國產處理器的效能做一個評價。這裡,我們首先對比三款國產處理器的 SPEC CPU 2006 效能。

飛騰 FT2000-4 處理器沒有官方的 SPEC CPU 2006 效能。網友yygg100 使用飛騰的內部測試配置檔案,得到了 FT2000-4 處理器的整數峰值效能為 23.2 分;遺憾的是,在這個測試中並沒有進行浮點效能的測試,該網友也沒有提供配置檔案的細節。這個成績已經初步實現了飛騰在 2016 年的規劃,即到 2018 年 SPEC CPU 2006 效能達到 20~30 分。

兆芯則直接在官網上公開了處理器的效能,目前 KX-6000 的效能為 3GHz 下單核整數效能 29.2 分,浮點效能則高達 38 分。由於兆芯處理器採用 X86 指令集,在進行效能測試的時候兆芯可以使用 Intel 編譯器來獲得最高效能,這也是兆芯的生態優勢之一。

龍芯 3A4000,採用 28nm 工藝,主頻 2.0 GHz 下,單核 peak 整數效能 21.1 分,浮點效能 21.2 分;單核 base 整數 19.1 分,浮點 18.7 分。我在去年試圖復現這個成績,沒有成功,即使超頻到 2.15GHz 的情況下,最終的成績也沒有超過 20 分,深感遺憾。現在我想再試一下,以正視聽。

圖 1 三款國產處理器的單核效能對比

二、影響處理器效能的因素

在效能評測中,影響效能的因素有很多,簡單的講可以概括為以下幾個個部分:

  • 處理器核的設計水平。處理器核的效能是決定處理器效能的最關鍵因素。在相同的主頻下,使用高效處理器核的處理器效能更好。

  • 處理器主頻。採用同樣的處理器核,更高的處理器主頻能夠有更好的效能。優秀的製造工藝能夠顯著提高處理器的主頻。比如,同樣採用 FT663 核心,採用 40nm 工藝的飛騰 FT2000-2 處理器主頻只有 1.0 GHz,而採用 16/14 nm 工藝的 FT2000-4 處理器主頻高達 2.6 GHz。採用優秀的物理設計,也能夠顯著提高處理器的主頻,比如龍芯 3A3000 處理器和龍芯 3A4000 處理器都採用 28 nm 工藝流片,前者主頻只有 1.5 GHz,而後者的主頻提高到了 2.0 GHz。

  • 處理器的快取大小。眾所周知,Intel 的處理器閹割快取以後就變成了奔騰。更大的處理器快取,有助於提高處理器的效能。比如,龍芯 3A2000 處理器共享 3 級快取為 4M,龍芯 3A3000 處理器的共享三級快取提高到了 8M,使得 3A3000 處理器的效能有了更多提升。

  • 記憶體的訪存速度。有部分應用是訪存密集型的,對這些應用來說,提高記憶體的訪存效能能夠有效提高處理器效能。影響記憶體效能的因素有記憶體的頻率、記憶體通道的數目。如果主機板上有多個處理器,還需要考慮每個處理器和記憶體的距離。

  • 編譯器和編譯選項。優秀的編譯器,加上與應用特徵匹配的編譯選項,能夠顯著提高計算的效能。在 Intel 平臺上,要全面發揮處理器的效能,最佳選擇是使用 Intel 編譯器;如果使用開源的 GCC 編譯器,往往不能充分發揮處理器的能力。比如,兆芯 KX6000 處理器 SPEC CPU 2006 峰值效能整數 29.2 分,浮點 38 分,就是使用 Intel 編譯器測出來的。此外,還有大量的編譯選項提高二進位制檔案效能,選擇合適的編譯選項是提高效能的重要手段。比如,對於支援 avx 指令的處理器,在使用 GCC 進行編譯的時候開啟 - mavx 選項,可能會顯著提高程式的效能。

  • 作業系統核心。過於古老的作業系統核心可能無法很好的支援新處理器的特性。如果作業系統核心編譯的時候沒有設定正確的選項,也可能無法支援新的處理器特性。以龍芯處理器為例,龍芯 3A4000 處理器增加了 MSA 指令,支援 128 位向量操作,如果作業系統核心不支援 MSA,那麼所有啟用了 MSA 指令的二進位制檔案都無法正常執行,也就無法發揮處理器的效能。

  • 程式執行依賴的底層函式庫。程式執行依賴的 libc 庫和 libm 庫,對處理器效能的發揮也有影響。高效能的數學庫能夠加快底層數學函式的計算,提高計算效能。如果是進行矩陣運算、訊號處理,那麼高效能的 BLAS、LAPACK 庫、FFT 庫也能提高程式的運算速度。

三、龍芯 3A4000 處理器的 SPEC CPU 2006 效能調優

在對龍芯 3A4000 進行效能測試的時候,我測試了作業系統核心、記憶體效能、主頻、編譯選項等對作業系統效能的影響。

1. 編譯器優化選項

首先,我考察了編譯器的各種優化選項對效能的影響。此時,我的測試環境是龍芯 3A4000 處理器,主頻 1.8GHz, 配單根 8GB 2400MT/s 記憶體條。作業系統為龍夢 Fedora 28,核心版本為 5.4.60,編譯器版本為 GCC 8.4。我簡單嘗試了 O2、O3、Ofast 三個優化選項,得到的 SPEC CPU 2006 效能如圖 2 所示。

圖 2 採用 O2、O3、Ofast 選項時的處理器效能對比

這個效能看起來實在是不怎麼樣。從 O2 到 O3 再到 Ofast,程式的效能有些許的提升,但距離龍芯官方生成的 20 分還差的很遠。接下來,我們可以通過進一步編譯器引數來對處理器的效能進行優化。我採用的主要編譯器引數和作用如下表所示。

編譯器引數

作用

-march=loongson3a

開啟針對龍芯 3A 處理器的優化

-mabi=n32

使用 N32 的 ABI

-funroll-all-loops

迴圈展開

-mmsa

使用 MIPS SIMD 指令

-flto

開啟連結時優化

-ftree-parallelize-loops

開啟自動並行

-fprofile-generate,-fprofile-use

使用 profile guided optimization

對每個測試專案的編譯引數,都進行了調整,最終得到的 peak 效能分數提高到了整數 18.09 分,浮點 17.64 分,相對於僅使用 Ofast 引數的效能分別提高了 34% 和 24%。圖 3~ 4 對比了只使用 Ofast 引數的效能和 peak 效能的對比。

圖 4 peak 效能和僅採用 Ofast 選項的效能對比

從測試的結果看,僅僅依靠編譯選項的調整,就可以大幅提高應用程式執行的速度。對於部分測試的效能,甚至有數倍的效能提升。比如,456.hmmer 測試專案的分數從 11.7 分提高到 27.4 分,效能是之前的 2.3 倍,這主要是因為啟用了 MIPS 的 SIMD 指令;436.cactusADM 測試專案的分數從 2.5 分提高到 7.3 分,效能是之前的 2.9 倍。

2. 作業系統核心的選擇

除了編譯選項的調整,作業系統核心也對應用程式的效能有著非常大的影響。採用同樣的編譯選項,我分別使用 Fedora 28 的 5.4.60 核心以及龍芯提供的 4.19.161 核心進行了效能測試。使用 4.19.161 核心,進一步提升了程式的效能,整數 / 浮點效能分別從 18.09 分 /17.64 分,提高到了 18.8 分 / 19.92 分,效能的提升分別為 4% 和 13%。

如圖 5 所示,429.mcf 效能從 20.56 分提高到了 24.9 分,效能提高了 21%。而效能提升最為明顯的專案是 436.cactusADM,分數從 7.3 分提高到了 44.9 分,效能暴漲到原來的 6.15 倍,簡直像開掛了一樣。這也表明龍芯公司在作業系統核心的優化上,也做了很多工作。

圖 5 作業系統核心對效能的影響

3. 記憶體效能

進一步,我對比了記憶體效能對系統性能的影響。當系統增加一根記憶體條,組成雙通道以後,整體的效能再次提升,整數 / 浮點效能分別提升到了 19.60 分和 20.99 分,相比之前的測試分別又提高了 4.3% 和 5.5%。其中,效能提升較大的專案如圖 6 所示。很明顯,這些專案也是訪存密集型的。在對記憶體效能進行調優以後,1.8 GHz 主頻的龍芯 3A4000 處理器的浮點效能已經超過了 20 分。

從測試的結果也可以看出,462.libquantum 測試對訪存效能非常敏感,將記憶體從單通道升級到雙通道,效能提升了 66%。

圖 6 記憶體對效能的影響

4. 處理器主頻

以上的測試都是在 1.8 GHz 主頻下完成的。實際上,龍芯 3A4000 處理器睿頻頻率可以到 2.0 GHz。而使用龍芯核心開發者 flygoat 提供的龍夢 A1901 主機板核心超頻補丁,還可以進一步提升龍芯 3A4000 處理器的主頻到 2.2 GHz。

提高主頻的話,龍芯 3A4000 處理器的效能究竟可以提升到什麼程度?從下圖 7 可以看出,在 2.0GHz 主頻下,整數效能和浮點效能分別為 21.3 分和 22.9 分,這已經超過了龍芯官方提供的整數 21.1 分、浮點 21.2 分的 peak 效能。我所測試的 A1901 主機板,3A4000 處理器可以穩定在 2.1GHz 主頻下,在此主頻下整數效能和浮點效能分別為 22.2 分和 23.8 分。

圖 7 不同主頻下龍芯 3A4000 處理器的效能

然而,這並非是龍芯 3A400 處理器的效能極限。我在測試中使用的是 GCC 8.4 編譯器,其中對龍芯 3A4000 中指令的支援並不完善。比如,龍芯 3A4000 中實現了 256 位向量操作指令 LASX,但我在跑分的時候只用到了 128 位的向量操作指令 MSA。如果編譯器中的編譯選項對龍芯處理器進行了深度的調優,整個系統的效能還有進一步提升的空間。

經過上述的測試,我對系統的硬體、軟體等方面進行了多種調優,通過優化編譯器選項、作業系統核心、記憶體效能,以及對處理器的超頻,將 SPEC CPU 2006 的效能從最初的整數 13.1 分、浮點 12.2 分,提高到了最終的整數 22.2 分、浮點 23.8 分(2.1 GHz)。這些優化的經驗,對於類似的系統同樣適用。

四、針尖對麥芒:飛騰 FT2000/4 vs 龍芯 3A4000 處理器

我們瞭解了龍芯 3A4000 處理器的效能,那麼和友商的飛騰 FT2000-4 處理器相比,龍芯 3A4000 的差距有多大呢?

專案

龍芯 3A4000

飛騰 2000-4

處理器核

GS464V

FTC663

指令集

LoongISA

ARM V8

處理器核數

4

4

處理器主頻

2.0

2.6

工藝

28nm

14nm

功耗

30~50W

10~15W

記憶體控制器

DDR4 最高 2400MT/s

DDR4 最高 3200MT/s

可以看出,採用先進工藝的 FT2000-4 處理器在主頻和功耗上大幅領先龍芯 3A4000 處理器。那麼處理器的真實效能有多大的差距呢?最近,貼吧網友 yygg100 對 FT2000 處理器的 SPEC CPU 2006 的 peak 效能進行了測試,得到了在 2.6GHz 主頻下單核 peak 整數效能 23.2 分的成績。雖然他的測試並不完善,只有整數效能測試,沒有浮點效能測試的資料,但這依舊是目前已知的 FT2000 處理器單核效能的最高值。

我們將這個資料與龍芯 3A4000 在 2.0GHz 下的效能進行了對比,龍芯 3A4000 效能為 21.3 分。由於龍芯處理器工藝落後,主頻較低,主頻只有飛騰處理器的 77%,而整數效能達到了飛騰處理器的 92%。

圖 8 龍芯 3A4000 和飛騰 FT2000-4 處理器整數效能對比。

從圖中可以看出,在 12 項測試中,飛騰處理器在 8 個專案上效能強於龍芯 3A4000,其中 libquantum 這一項的效能差距最大,龍芯處理器效能只有 FT2000 的 58%,因為飛騰處理器不僅主頻較高,而且記憶體頻率為 2666MT/s,相比龍芯 3A4000 的 2400MT/s 有明顯的優勢。

而在 429.mcf,445.gobmk,456.hmmer, 458.sjeng 這 4 個專案上,2.6 GHz 的飛騰 2000 處理器效能弱於 2.0 GHz 的 3A4000 處理器。隨著龍芯 3A5000 處理器的上市,飛騰 2000 處理器的單核效能領先優勢將會逐漸消失。

五、對龍芯 3A5000 的展望

龍芯 3A5000 處理器已經流片,很快就要釋出了。龍芯 3A5000 處理器將採用臺積電 12nm 工藝流片,處理器主頻有望提高到 2.5 GHz 以上,和友商處理器的主頻差距進一步縮小。據稱,龍芯 3A5000 的 SPEC CPU 2006 效能將達到 25~30 分。

根據我對龍芯 3A4000 處理器的效能測試,如果把龍芯 3A5000 處理器視為 3A4000 的簡單升級版,僅僅提高主頻,記憶體頻率和快取都不變,採用圖 7 中的資料,進行一個簡單的資料擬合,我預測龍芯 3A4000 處理器在 2.5 GHz 主頻時 peak 效能約為整數 25.9 分、浮點 26.7 分。龍芯 3A5000 會將三級快取大小加倍,提高記憶體的頻率 (有望達到 3200MT/s),還會進一步提升處理器的效能,我們可以假設有這些調整可以帶來 5% 的效能提升;龍芯 3A5000 處理器採用了 Loongarch 指令集,擺脫了 MIPS 指令集的歷史包袱,根據胡偉武研究員的報告,僅僅是指令集的更新,就可以讓效能提升 16.6% 和 9.4%,我們可以保守估計有 9% 的效能提升。龍芯 3A5000 也有望使用真正的 256 位向量指令,而非 MSA 中的 128 位向量,程式執行速度可以進一步提高,可以保守估計這能帶來 2% 的效能提升。

根據上面的計算,我認為龍芯 3A5000 處理器的 SPEC CPU 2006 單核 peak 效能可以達到整數 30 分、浮點 30 分。屆時,龍芯處理器將在單核效能上追平或趕超其他國產處理器。2021 年下半年,16 核龍芯 3C5000 以及 64 核龍芯 3E5000 的流片,也將提高龍芯處理器的多核效能,有助於龍芯擴充套件伺服器市場。

致謝

本次測試借用了網友 gueenet 的龍芯 3A4000 主機,對他的慷慨和信任我深表感謝!在對核心的效能測試中得到了陳華才、flygoat 的指導。對 SPEC CPU 2006 效能的探索,受到了網友 yygg100 所發視訊的啟發,對他的視訊分享一併表示感謝。封面圖由龍芯吧 Windows1089 提供。

參考資料:

對 SPEC CPU 感興趣的朋友,可以參考 https://github.com/zevanzhao/loongson-notes中的文件,進行龍芯平臺下 SPEC CPU 2006 的跑分。