教你如何使用SPEC CPU2006

因爲工作原因陸陸續續接觸到SPEC的測試,由於此項測試相對門檻高一些,測試周期長,網上靠譜的資料不多,遂將自己的測試經驗總結下來跟大家分享。

本文只涉及到一些基本的測試知識,歡迎有經驗的朋友補充,交流~

0 工具介紹 

SPEC是標準性能評估公司(Standard Performance Evaluation Corporation)的簡稱。SPEC是由計算機廠商、系統集成商、大學、研究機構、諮詢等多家公司組成的組織,這個組織的目標是建立、維護一套用於評估計算機系統的標準。

在早些年,業界使用的是其上一個版本SPEC CPU 2000。和SPEC CPU 2000一樣,SPEC CPU 2006包括了CINT2006和C FP2006兩個子項目,前者用於測量和對比整數性能,而後者則用於測量和對比浮點性能,SPEC CPU 2006中對SPEC CPU 2000中的一些測試進行了升級,並拋棄/加入了一些測試,因此兩個版本測試得分並沒有可比較性。

SPEC CPU測試中,測試系統的處理器、內存子系統和使用到的編譯器(SPEC CPU提供的是源代碼,並且允許測試用戶進行一定的編譯優化)都會影響最終的測試性能,而I/O(磁盤)、網絡、操作系統和圖形子系統對於SPEC CPU2006的影響非常的小。

SPEC CPU 2006 benchmark是SPEC新一代的行業標準化的CPU測試基準套件。重點測試系統的處理器,內存子系統和編譯器。這個基準測試套件包括的SPECint基準和SPECfp基準。 其中SPECint2006基準包含12個不同的基準測試和SPECfp2006年基準包含19個不同的基準測試。SPEC設計了這個套件提供了一個比較標準的計算密集型,高性能的跨硬件的CPU測試工具。在SPEC CPU 2006基準有幾種不同的方法來衡量計算機性能。 一種方式是測量計算機完成單一任務的速度; 另一種方式吞吐量,容量或速率的測量。 說明:由於spec2006支持多種類型操作系統。以下安裝、測試、移植等介紹均基於Unix 和其他的 Unix-like system如linux。Windows系統不在此範圍內。

tips1 :SPEC CPU 2006 是收費工具。

之前在某些文章或論壇下面看到求資源的,建議如果是要做相關CPU測試的話,付費購買,或者向你們的供貨商索要吧~

tips2:選擇正確的SPEC 安裝包

SPEC CPU 2006 跟不同的CPU適配後的工具,所以說x86下的源碼包不能再MIPS下運行,MIPS的也不能在ARM下運行,基本概念,給剛接觸的人提醒一下。

1 安裝和編譯

安裝和編譯分爲兩種情況:一對於源碼,是需要安裝和編譯的;另一種是在相同環境下編譯好的安裝包,拷貝過來解壓後即可運行使用。

以Ubuntu 16.4爲例子,介紹源碼的安裝和編譯過程。

安裝
首先下載CPU2006到本地,一般會下載到鏡像文件,解壓之後可以找到install.sh

tips3:SPEC CPU2006沒有安裝目錄的要求。

~$ ./install.sh
SPEC CPU2006 Installation

Top of the CPU2006 tree is '/media/*/SPEC_CPU2006v1.1'
Enter the directory you wish to install to (e.g. /usr/cpu2006)
/home/myname/cpu2006

Installing FROM /media/*/SPEC_CPU2006v1.1
Installing TO /home/myname/cpu2006

Is this correct? (Please enter 'yes' or 'no')
yes
...
之後等待安裝完成,到此安裝過程結束。

編譯
根據文檔,在使用之前需要先配置環境。CPU2006中已經集成了配置環境的方法,只需要執行一條命令就可以完成配置操作

source ./shrc
每次重新打開terminal的時候,都需要先運行該命令,之後纔可以正常使用。

在編譯工具之前,我們首先需要進入config文件夾,根據自己的需要,複製一份已有的配置文件模板作爲自己使用的文件,例如

cp Example-linux64-amd64-gcc43.cfg my.cfg
例如我們只需要測試int型的CPU性能,我們可以執行以下操作:

runspec --config=my.config -T base --action=build int

2 運行

運行的方式很簡單,即通過runspec 命令+相應的參數,執行相應的測試。以下面的測試命令爲例,介紹SPEC測試。

runspec -config=XX.cfg -size=ref -r 4 -tune=base -noreportable -o text,screen,pdf -I -iterations=3 all 


0)配置文件:XX.cfg,配置文件中可以包含上述命令的所有信息,但是runspec命令的優先級高。此文件在spec的解壓目錄下,由                    提供的cfg文件修改而來。
1)測試規模:ref(測試規模有test,ref,train其中test最小跑的時間最短,如果測試編譯器正確性的時候可以用test規模,但是想測試性能時候用ref)
2)測試次數:iterations=3次(編譯器性能穩定時候測一次就行),也可以寫成n 3;

tips4:如果想得到加權統計的結果,也就是常說的cpu的spec分數,需要設置iterations大於等於3。
3)測試範圍: all  表示進行fp和int測試(將all替換成int 或 fp 進行定點和浮點的測試;將all替換成456/444等文件編號,表示對某一測試項進行單獨測試)

對於CPU的SPEC測試,默認這一項是all,但是對於其中的某一項測試分數不滿意,可通過指定此測試項的編號,進行單獨測試。測試也會得到一個分數,做單項的性能調優時候,可以用得到。

4)輸出格式:-o text,screen,pdf 表示測試完成,生成報告的格式,依次分別是txt,屏幕顯示和pdf格式,保存目錄在spec解壓目錄result中。

5)noreportable && reportable : 表示檢測/不檢測生成的二進制文件是否修改過。

--reportable 如果原來生成的二進制文件被修改了,則運行時會自動重新編譯生成二進制文件,確保運行的程序是原始的程序。

6)測試核數:-r 設置測試的CPU核心數目;

7)測試模式:-tune = base 基準測試;-tune = peak 峯值測試;-tune默認是base 可以選擇base, peak, or all ,Report 首先是base,其次是peak.

8)-I : 表示測試中,如遇報錯,略過錯誤繼續測試;

3  常用測試參數

上面給出了例子,介紹了主要的測試參數配置。下面給出一組常用的測試命令及意義。

a.runspec -c test.cfg -i test -I all 基於最小測試數據集快速執行所有的測試,測試過程中如果某個用例發生錯誤,則跳過錯誤用例,繼續執行其他用例。一般不用於不用於正式測試,驗證環境是否有問題。

b.runspec -c test.cfg -i ref -n 3 -I all 基於最大測試數據集全面執行所有的測試,用於測試單核CPU,測試過程中如果某個用例發生錯誤,則跳過錯誤用例,繼續執行其他用例。

c.runspec -c test.cfg –r ref –n 3 fp 基於最大測試數據集,只運行fp測試

d.runspec -c test.cfg –r ref –n 3 int 基於最大測試數據集,只運行int測試

e.runspec -c test.cfg -i ref 473.astar 基於最大測試數據集只執行473.astar單個測試。

f runspec –c test.cfg –i ref --rate 4 int 基於最大數據測試集進行rate測試,運行4線程測試的分值

其他命令補充

--action build 創建測試項目
--action onlyrun 只是運行,不進行確認測試結果是否正確
--action report 標準測試
--action clean  清理已經建立的測試項目

tips5:SPEC CPU2006測試的時間很長,舉例來說龍芯3A3000三遍浮點測試的時間24小時左右,測試不可中斷。

tips6:SPEC CPU2006測試時候,需要一定的硬盤空間,建議大於等於20GB;

4  測試結果

測試結束後在result目錄下,查看測試結果,測試結果一般以測試類型和測試次序進行區別,並且會按照整點和浮點進行劃分。如果是按照正式reportable的模式進行測試的話,會出一份網頁版的正式測試結果,參見下圖: 非正式結果可以去asc或txt文檔查看,格式例如下文:

                Base     Base       Base        Peak     Peak       Peak
Benchmarks      Ref.   Run Time     Ratio       Ref.   Run Time     Ratio
-------------- ------  ---------  ---------    ------  ---------  ---------
400.perlbench    9770      430         22.7 S    9770      339         28.8 S
400.perlbench    9770      429         22.8 *    9770      338         28.9 S
400.perlbench    9770      429         22.8 S    9770      339         28.8 *
401.bzip2        9650      559         17.3 *    9650      552         17.5 *
401.bzip2        9650      559         17.3 S    9650      553         17.5 S
401.bzip2        9650      560         17.2 S    9650      552         17.5 S
403.gcc          8050      374         21.5 S    8050      337         23.9 S
403.gcc          8050      367         22.0 *    8050      337         23.9 S
403.gcc          8050      366         22.0 S    8050      337         23.9 *
429.mcf          9120      187         48.9 S    9120      187         48.9 S
429.mcf          9120      188         48.6 *    9120      188         48.6 *
429.mcf          9120      211         43.2 S    9120      211         43.2 S
445.gobmk       10490      559         18.8 S   10490      542         19.4 S
445.gobmk       10490      559         18.8 S   10490      542         19.4 *
445.gobmk       10490      559         18.8 *   10490      541         19.4 S
456.hmmer        9330      213         43.8 S    9330      213         43.7 *
456.hmmer        9330      247         37.8 S    9330      214         43.6 S
456.hmmer        9330      214         43.5 *    9330      213         43.7 S
458.sjeng       12100      616         19.6 *   12100      574         21.1 *
458.sjeng       12100      617         19.6 S   12100      575         21.0 S
458.sjeng       12100      585         20.7 S   12100      574         21.1 S
462.libquantum  20720       14.2     1460   *   20720       14.2     1460   *
462.libquantum  20720       14.4     1440   S   20720       14.4     1440   S
462.libquantum  20720       13.5     1540   S   20720       13.5     1540   S
464.h264ref     22130      578         38.3 *   22130      527         42.0 S
464.h264ref     22130      579         38.2 S   22130      526         42.0 *
464.h264ref     22130      578         38.3 S   22130      526         42.0 S
471.omnetpp      6250      349         17.9 S    6250      288         21.7 *
471.omnetpp      6250      348         17.9 *    6250      288         21.7 S
471.omnetpp      6250      348         18.0 S    6250      289         21.7 S
473.astar        7020      313         22.4 S    7020      313         22.4 S
473.astar        7020      311         22.6 S    7020      311         22.6 S
473.astar        7020      311         22.6 *    7020      311         22.6 *
483.xalancbmk    6900      174         39.7 *    6900      170         40.7 S
483.xalancbmk    6900      174         39.6 S    6900      170         40.5 S
483.xalancbmk    6900      174         39.7 S    6900      170         40.6 *
==============================================================================
400.perlbench    9770      429         22.8 *    9770      339         28.8 *
401.bzip2        9650      559         17.3 *    9650      552         17.5 *
403.gcc          8050      367         22.0 *    8050      337         23.9 *
429.mcf          9120      188         48.6 *    9120      188         48.6 *
445.gobmk       10490      559         18.8 *   10490      542         19.4 *
456.hmmer        9330      214         43.5 *    9330      213         43.7 *
458.sjeng       12100      616         19.6 *   12100      574         21.1 *
462.libquantum  20720       14.2     1460   *   20720       14.2     1460   *
464.h264ref     22130      578         38.3 *   22130      526         42.0 *
471.omnetpp      6250      348         17.9 *    6250      288         21.7 *
473.astar        7020      311         22.6 *    7020      311         22.6 *
483.xalancbmk    6900      174         39.7 *    6900      170         40.6 *
 SPECint(R)_base2006                   36.7
 SPECint2006                           39.1

此結果來源於網絡,可以看出定點峯值測試結果(peak) 36.7分;定點基準測試結果36.7分。

本人實測的龍芯3A3000,單核浮點8-9分,多核浮點26-28分。龍芯3A4000測試結果要好蠻多,可見國產CPU還是取得了不小的進步。

5  具體測試項目

Spec int2006 12個整點測試項目

400.perlbench:C語言編寫,同spec2000的253.perlbmk類似,是Perl V5.8.7版本的刪減版,同樣刪除了一下操作系統特性有關的東西,增加了第三方的模塊,如:SpamAssassin V2.61,Digest-MD5 v2.33,HTML-Parser v3.35,MHonArc V2.6.8,IO-stringy V1.205,MailTools V1.60,TimeDate V1.16。400.perlbench採用3個腳本進行增加負載或工作。1.主要的負載在於打開 垃圾郵件過濾軟件SpamAssassin。採取的過濾方式是採用記分制,也就是說會根據我們所設定的標準來給予分數超過標準值的時候即判定爲 SPAM(垃圾郵件),其餘爲非垃圾郵件。但對SpamAssassin軟件做了很大程度的修改,避免一些I/0操作,並且沒有使用貝葉斯過濾。2.是比較流行的email到HTML的轉換器MHonArc 3.使用了spec2006的工具套件specdiff。

401.bzip2: C語言實現,同spec2000的256.bzip2類似,基於Julian Seward的bzip2 v1.03.唯一的不同是SPEC中的bzip2除了輸入外,無文件I/O。所有的壓縮和解壓都在內存中進行。輸入,輸出都和gzip的相似。負載包括六個部分:兩個小的JPEG圖片、一個程序、一個tar包起的幾個源程序文件、一個HTML文件、混合文件,包括壓縮起來的高可壓縮文件及不怎麼可壓縮的文件。測試分別使用了三個不同的壓縮等級進行壓縮和解壓縮

403.gcc:C語言實現,同spec2000的176.gcc類似。該測試是基於gcc V3.2,爲AMDCPU生成機器碼。相比spec2000的176.gcc,該測試有更多的輸入文件,因此測試壓力會更大,負載來源於對9組C代碼進行編譯。

429.mcf:C語言實現,同時需要libm庫支持,同spec2000的181.mcf類似,MCF是一個用於大型公共交通中的單站車輛調度的程序。但對輸入文件做了一定的修改,由32位變成64位,用以兼容64位系統。並且增加了cache命中和程序的性能。相比spec2000的181.mcf來說,佔用的內存由之前的100M-190M變爲860M-1700M。

445.gobmk:C語言實現,同spec2000的186.crafty類似。不同的是這裏是實現的圍棋遊戲。相比spec2000程序更復雜。

456.hmmer:C語言實現。HMMER是基於隱馬爾可夫模型(profile HMMs),用於生物序列分析工作。同Timed HMMer Search 類似。

458.sjeng:C語言實現。基於一種象棋遊戲Sjeng11.2,屬於人工智能的範疇。

462.libquantum:C語言實現(C99)。libquantum是模擬量子計算機的庫文件,用來進行量子計算機應用的研究。

464.h264ref:C語言實現。一種視頻壓縮程序,基於H264AVC 9.3版,去除了I/O和平臺相關的東西。

471.omnetpp:C++語言實現。OMNeT++,離散事件仿真。包括約8000臺計算機和900個交換機/集線器,以及混合了各種從10Mb到1000Mb速率的大型CSMA/CD協議以太網絡模擬。

473 astar:C++語言實現,實現了2D尋路算法A*的三種不同版本。

Spec fp2006 17個浮點測試項目

410.bwaves:Fortran 77語言實現,流體力學範疇。對三維瞬跨音速粘性流中衝擊波的模擬計算

416.gamess:Fortran語言實現,量子化學範疇。採用GMAESS組件,包含 胞嘧啶分子、水和Cu2+離子、三唑離子等3種SCF自洽場計算。

433.milc:C語言實現,量子力學範疇,採用MILC組件,包含用來研究QCD量子色動力學、夸克及膠子的四維SU(3)格點規範理論的模。

434.zeusmp :Fortran 77/REAL*8語言實現,屬於計算流體力學範疇,ZEUS-MP程序,用來計算理想、非相對論條件下的流體力學和磁流體力學,434.zeusmp模擬計算了一個統一磁場中的3D衝擊波。

435.gromacs :C & Fortran語言實現,屬於生物化學/分子力學範疇。GROMACS是一個分子力學計算套件,然而也可以用於非生物系統,435.gromacs模擬了在一個水和離子溶液中的蛋白質溶菌酶結構在各種實驗手段如核磁共振的X光照射下的變化。

436.cactusADM:Fortran 90, ANSI C語言實現,物理中的廣義相對論。來源於Cactus  BenchADM。436.cactusADM對時空曲率由內部物質決定的愛因斯坦演化方程進行求解,愛因斯坦演化方程由10個標準ADM 3+1分解的二階非線性偏微分方程組成。

437.leslie3d :Fortran 90語言實現,屬於流體力學範疇。 LESlie3d是用來計算湍流的計算流體力學程序,437.leslie3d計算了一個如燃油注入燃燒室的時間分層混合流體。

444.namd:C++語言實現。屬於生物/分子學範疇。NAMD是一個大型生物分子系統並行計算程序,444.namd模擬了了92224個原子組成的A-I載脂蛋白

447.dealII:C++語言實現。進行有限元分析,w/Boost lib 、deal.II lib、deal.II是定位於自適應有限元及誤差估計的C++庫,447.dealII對非常係數的亥姆霍茲方程進行求解,它使用了基於二元加權誤差估計生成最佳網格的自適應方法,該方程在3維得解。

450.soplex:C++語言實現。採用Plex v1.2.1程序,Plex使用單純形算法解線性方程

453.povray:ISO C++ 語言實現。 POV-Ray POV-Ray是一個光線追蹤渲染軟件,453.povray渲染一幅1280x1024的反鋸齒國際象棋棋盤圖像

454.calculix:Fortran 90 & C語言實現,結構力學範疇。CalculiX是一個用於線性及非線性三位結構力學的有限元分析軟件,454.calculix計算了一個高速旋轉的壓縮盤片在離心力的作用下的應力和變形情況

459.GemsFDTD:Fortran 90語言實現。屬於電磁學範疇。 459.GemsFDTD使用FDTD(有限差分時域)方法求解三維時域中的麥克斯韋方程,計算了一個理想導體的雷達散射截面

465.tonto: Fortran 95實現。量子化學範疇Tonto是一個面向對象的量子化學程序包,465.tonto計算面向量子晶體學,它基於一個符合X光衍射實驗數據的、約束的分子Hartree-Fock波函數

470.lbm :ANSI C語言實現。 470.lbm使用LBM(格子波爾茲曼方法)模擬非壓縮流體,它模擬了兩種情況:類似活塞推動的剪切驅動流體和管道流體,測試包含了3000個步驟

481.wrf :Fortran 90 & C語言實現。WRF v2.0.2 481.wrf基於WRF(Weather Research and Forecastin)模型,對NCAR的數據進行了計算,數據包括了UTC 2001.06.11到UTC 2001.06.12以三小時爲間隔的數據

482.sphinx3:C語言實現。Sphinx-3一種語音識別軟件。

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章