最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

在龍芯3A5000上測試SPEC CPU 2006

2021-08-09 16:25 作者:gueenet  | 我要投稿

  SPEC CPU 2006 benchmark是一種行業(yè)標(biāo)準(zhǔn)化的CPU測試基準(zhǔn)套件,重點測試系統(tǒng)的“CPU-內(nèi)存”子系統(tǒng)以及編譯器的優(yōu)化程度??窜浖拿志椭?,這個測試工具主要是測試CPU,內(nèi)存對測試成績的影響沒有CPU那么大。根據(jù)我在不同的電腦上反復(fù)更換硬件實測比較得知,硬盤等其它設(shè)備的性能對測試成績幾乎沒有影響。

  SPEC CPU 2006整套工具分成兩個部分,一是測試工具(tools),二是測試基準(zhǔn)(benchmarks),基準(zhǔn)中包含int和fp兩種測試集,int測試集中有12個測試項目,fp測試集中有17個測試項目。運行SPEC CPU 2006測試時,是測試者運行測試工具,再由測試工具根據(jù)預(yù)先配置的編譯器及編譯參數(shù)去自動編譯各個測試項目,編譯完成后再自動運行測試集,由測試工具統(tǒng)計測試集中每個項目的運行時長,給出最后的評價分?jǐn)?shù)。

  SPEC CPU 2006的工具提供了部分平臺的預(yù)編譯二進制,文件在$SPEC/tools/bin/目錄下,在有預(yù)編譯工具的平臺上就可以直接運行?install.sh?或 install.bat 進行安裝。下圖中是SPEC CPU 2006 1.2(Version 119 - 2021/8/16)版光盤中全部的測試工具的預(yù)編譯二進制,可見用于x86/AMD64的預(yù)編譯二進制最為齊全,既有Linux也有Window版本,可以直接安裝。而對MIPS則沒有Linux系統(tǒng)的二進制,對ARM架構(gòu)也沒有預(yù)編譯二進制,都必須自行編譯測試工具。LoongArch是一種全新的架構(gòu),也肯定不能指望SEPC 2006在十年前的光盤中就做好支持的準(zhǔn)備。


  按照SEPC官網(wǎng)上《Building the SPEC CPU2006 Tool Suite》的說明:“有時可能需要重建工具,例如,如果操作系統(tǒng)的變化使預(yù)編二進制無法操作,或者如果您是第一個為新架構(gòu)添加支持的人。”那么,當(dāng)測試工具的預(yù)編譯二進制在某些系統(tǒng)上不能運行時,或者當(dāng)缺少某個架構(gòu)的預(yù)編譯二進制時,就應(yīng)該自己編譯測試工具。

  有一些網(wǎng)友因為在x86上測試SPEC CPU 2006時可以直接安裝,就認(rèn)為安裝SPEC根本不需要自己編譯,這是沒有分清Tools和Benchmark而造成的誤解。如果一款軟件在任何架構(gòu)的CPU和任何系統(tǒng)上都能直接安裝使用,那么也就不會存在軟件生態(tài)的問題了。

  SPEC CPU 2006 1.2發(fā)布時,GCC的版本還是4.x。由于GCC版本更新,部分.h文件有修改,glibc庫也迭代了多個版本,在現(xiàn)在的各個Linux發(fā)行版上用較新的GCC版本已經(jīng)不能把測試工具直接編譯通過。

《SPEC CPU2006: Read Me First》中提到,如果工具無法在系統(tǒng)上運行或構(gòu)建時,應(yīng)該聯(lián)系SPEC以獲得技術(shù)支持。然而,電腦愛好者研究和學(xué)習(xí)性質(zhì)的測試,去找SPEC技術(shù)支持就小題大作了(因為不想給錢),所有的問題咱們都自己解決。在網(wǎng)上早有一些文章探討了在GCC8.x甚至更高版本上編譯SPEC CPU 2006測試工具出現(xiàn)的問題,并給出了解決方法,我想SPEC的技術(shù)支持可能也不會有什么創(chuàng)新,畢竟有些問題只能那樣解決。本文也只是把這些文章中提到的解決方案進行了一番整合。

  LoongArch是一個全新的架構(gòu),在龍芯3A5000上編譯SPEC CPU 2006測試工具比在龍芯3A4000上更加麻煩。我在ARM64架構(gòu)的樹莓派4B(Ubuntu、GCC10.3)環(huán)境下編譯時遇到的問題比基于LoongArch64的3A5000(Loongnix、GCC8.3)的更多,應(yīng)該是GCC版本更高的原因。但本文主要記錄在3A5000(Loongnix、GCC8.3)上編譯SPEC CPU 2006測試工具的過程,對其它架構(gòu)和GCC版本不作細(xì)致討論。對文中這些問題的解決方式,在其它架構(gòu)的CPU上編譯SPEC CPU 2006測試工具時也能用到。

SPEC CPU 2006光盤鏡像的獲取

  SPEC CPU 2006是一個收費的測試工具,可以向SPEC購買,但官網(wǎng)上現(xiàn)在只能下SEPC CPU 2017版本的訂單,已經(jīng)沒有2006了。2017的非商用授權(quán)價$250,商用$1000。出于研究和學(xué)習(xí)的目的,SPEC CPU 2006有一些光盤鏡像在技術(shù)愛好者間私下擴散,可以去一些交流CPU技術(shù)的聊天群里問一問。只是這種沒給錢的鏡像按《著作權(quán)法》的規(guī)定,只能用于教學(xué)或者科學(xué)研究,可少量復(fù)制供教學(xué)或者科研人員使用。

  拿到光盤鏡像后,請檢查一下版本。

  官方發(fā)布的SPEC CPU 2006最終版本是 v1.2,發(fā)布日期是2011年9月7日,光盤中記錄的最后更新日期是2011年8月16日。官網(wǎng)上公布的v1.2版光盤鏡像文件的MD5校驗碼是“185F9167FB4C2208380E769D6668285D”,我確認(rèn)自己手上的光盤鏡像的MD5校驗碼和官網(wǎng)上的一致。

  $CDROM/version.txt 里面是版本號,如果低于v1.2,那么編譯測試工具時,需要解決的問題會更多,測試成績也不能與v1.2版完全等同。

在Linux中安裝有預(yù)編譯二進制程序的SPEC CPU 2006

  SPEC CPU 2006對x86/AMD64幾乎有全平臺的預(yù)編譯二進制支持,在使用x86/AMD64 CPU的電腦上,就可以直接運行intsall.sh或install.bat進行安裝。下面以在UOS for x86中安裝SPEC CPU 2006為例,說明安裝步驟。

 ?。保蜷_終端程序,進入存放光盤鏡像的文件夾,輸入命令掛載光盤鏡像。

sudo mount -t iso9660 SPEC_CPU2006v1.2.iso /mnt

  有的Linux系統(tǒng)的圖形界面提供了掛載光盤鏡像的簡單操作,在文件管理器中的光盤鏡像文件上點鼠標(biāo)右鍵,如果右鍵菜單中有掛載光盤鏡像的功能項,就不需要輸入命令了。

 ?。玻M入到光盤鏡像的掛載目錄,運行安裝程序。

cd /mnt ./install.sh

  然后會出現(xiàn)輸入安裝路徑的提示:

 ?。常缟蠄D所示,例如先在/home/guee下建立了一個cpu2006文件夾,就輸入完整路徑 /home/guee/cpu2006,之后回車。注意安裝路徑中不要有中文,不然在運行時可能會出現(xiàn)一些奇怪問題。然后安裝程序會詢問你源路徑和目標(biāo)路徑是否正確,輸入yes確認(rèn)即可。

  在之后安裝程序就會把測試工具復(fù)制到安裝目錄,并解壓benchmarks的所有測試項目源碼,最后測試一番perl腳本,就會給成安裝成功的信息。

  在x86上安裝很簡單,那么在其它平臺呢?比如在SPEC CPU 2006中沒有預(yù)編譯支持的ARM平臺上,我們也來試一試能不能直接安裝。下面我們在運行Ubuntu的樹莓派4B中看看安裝SPEC CPU 2006是什么情況,前面要求輸入安裝路徑和確認(rèn)的步驟還是一樣,只是在確認(rèn)后并沒有開始安裝,而是給出了一段文字信息:

  這段文字的大意是說:“我們似乎沒有適用于您的架構(gòu)的供應(yīng)商提供的二進制文件,您必須自己編譯工具二進制文件,請閱讀tools-build.html獲得如何構(gòu)建它們的說明。

  在龍芯3A4000和3A5000上運行install.sh也是給出這樣的信息,就是告訴我們需要自己編譯測試工具。

自己編譯SPEC CPU 2006測試工具的初始準(zhǔn)備

  光盤中的測試工具默認(rèn)沒有MIPS/LoongISA/LoongArch等架構(gòu)的Linux版二進制程序,需要自行編譯才能使用。下面以Loongnix20系統(tǒng)為例,進行編譯前的準(zhǔn)備工作。

 ?。保诰幾g之前,先要準(zhǔn)備好編譯器:

sudo apt-get install gcc g++

  如果準(zhǔn)備在測試工具編譯完成后測試fp(浮點性能),還需要安裝gfortran編譯器。

sudo apt-get install gfortran

  2.找到光盤根目錄下的 intall_archives 文件夾,里面的cpu2006.tar.xz就是測試工具以及Benchmarks的所有測試項目的源碼。如果不想掛載ISO,也可以用壓縮軟件打開iso文件,只把cpu2006.tar.xz這一個文件提取出來。

 ?。常裞pu2006.tar.xz解壓到硬盤上的文件夾中,例如 /home/guee/cpu2006。解壓出來的文件與用install.sh安裝到目標(biāo)路徑的內(nèi)容基本一樣,只是少了測試工具的二進制文件,但是多出了一個tools文件夾,$SPEC/tools/src里面就是測試工具的源代碼。

  我們需要運行$SPEC/tools/src文件夾中的buildtools來編譯測試工具,測試工具由許多功能模塊組成,上圖的各個文件夾大部分都是測試工具的組成部分。其中一部分是用于檢查系統(tǒng)環(huán)境和各種API功能是否正確的,還有一些是用來監(jiān)督測試過程和生成測試報告的。由于測試工具不像測試集那么內(nèi)聚,對系統(tǒng)中的部分基礎(chǔ)庫有版本依賴,與較新版本的GCC默認(rèn)情況下也存在不兼容的問題,用GCC8.x直接編譯肯定會失敗,因此就需要修改測試工具中的一些配置文件和源碼。

  注意:只能修改測試工具的源碼,不能修改測試集的源碼。首先測試集源碼不允被修改,測試時會自動校驗測試集的源碼有沒有被修改,如果修改過就不能通過驗證進行測試。何況測試集的源碼對系統(tǒng)環(huán)境依賴很小,在各種平臺都能正確編譯,本身就不需要修改。

解決SPEC CPU 2006測試工具構(gòu)建過程中的錯誤

 ?。埃畬懺谇懊?/strong>

  由于操作系統(tǒng)、基礎(chǔ)庫、編譯器等等升級,在新平臺上構(gòu)建一套有歷史的軟件肯定不會一帆風(fēng)順。必要的時候還需要對軟件源代碼進行修改,這也是開源的意義所在。但是對于SPEC CPU2006這種標(biāo)準(zhǔn)化的測試工具而言,允許改動的只有Tools部分,而不含Benchmark部分。其官網(wǎng)上的《Runspec Avoidance》一文甚至是在講解不使用Tools的情況下,如何運行Benchmark。但不使用Tools來運行Benchmark的話,就不會有測試報告,因為有效的Benchmark測試只能在Tools的監(jiān)督下運行,Tools還會校驗Benchmark的代碼和數(shù)據(jù)是否被篡改。

  $SPEC/tools/src/buildtools是用來編譯測試工具的,在編譯過程中,除了下面提到的第一和第二個問題,其它問題在x86的電腦上編譯SPEC CPU 2006測試工具時也會遇到,我在UOS for x86上試過,該遇見的問題都會遇見。只不過因為SPEC CPU 2006的光盤中自帶了x86架構(gòu)的Linux和Window的測試工具二進制文件,大多數(shù)測試者不會去嘗試自己編譯測試工具,而是運行./install.sh或 install.bat直接安裝,免去了編譯測試工具的麻煩。在3A5000上構(gòu)建SPEC CPU 2006測試工具遇到的所有問題,在基于ARM64的樹莓派上也一個都不少,因為SPEC CPU 2006的光盤內(nèi)容沒有對它們的的原生支持。

  在編譯過程中如果出錯,重新運行buildtools就會重新執(zhí)行全部編譯過程,這非常耗時。不過buildtools提供了一些變量,可以只運行指定的編譯步驟。

  例如 SKIPALL=1 DOPERL=1 ./buildtools 就只編譯 perl。下面列出控制 buildtools 編譯步驟的各個變量:

?SKIPALL - turns off everything. If you like, set this, then turn individual phases on by setting them.

?DOTOOLSRM - Remove previously installed tools

?DOCLEAN - Run 'make clean', 'make distclean', and 'make realclean' in all source directories.

?DOMAKE - build make

?DOXZ - build xz

?DOTAR - build tar

?DOMD5 - build specmd5sum

?DOSPECINVOKE - build specinvoke

?DORXP - build rxp

?DOEXPAT - build the expat XML parser, used by XML::SAX::ExpatXS

?DOPERL - build perl

?DOPERL2 - build perl modules

?DOCOPY - copy the results to $SPEC/bin and fix shbangs


  1.運行./buildtools出現(xiàn)錯誤

輸出的錯誤日志:

UNAME_MACHINE = loongarch64 UNAME_RELEASE = 4.19.0-12-loongson-3 UNAME_SYSTEM ?= Linux UNAME_VERSION = #1 SMP Sat Jun 19 03:02:31 UTC 2021 configure: error: cannot guess build type; you must specify one + testordie error configuring make

錯誤說明:

  在配置編譯的目標(biāo)平臺時,configure不知道現(xiàn)在是什么平臺,在像LoongArch這樣的全新的架構(gòu)上編譯就會出現(xiàn)這種情況。ARM64不是全新架構(gòu),但誕生日期也要比這個光盤鏡像晚一些,光盤中的各個配置文件沒有為它做好準(zhǔn)備,因此也會出現(xiàn)相同情況,只是UNAME_MACHINE后面變成了aarch64。

解決方法:

  在./buildtools之前設(shè)置變量CONFIGFLAGS為'--build=loongarch64-linux-gnu'。在終端中輸入如下的命令行來運行buildtools:

CONFIGFLAGS='--build=loongarch64-linux-gnu' ./buildtools

  如果是在ARM64架構(gòu)上,則把loongarch64-linux-gnu修改為aarch64-linux-gnu。

  可能有其它更加優(yōu)雅的解決方案,但因為對測試工具的編譯只需要完成一次就好,不經(jīng)常需要,我就不去尋找更好的方案了,感興趣的朋友可以試試看。

 ?。玻霈F(xiàn)machine `loongarch64' not recognized的錯誤

輸出的錯誤日志:

checking build system type... Invalid configuration `loongarch64-linux-gnu': machine `loongarch64' not recognized configure: error: /bin/bash config/config.sub loongarch64-linux-gnu failed

錯誤說明:

  和第一個錯誤一樣,也是因為編譯腳本不認(rèn)識LoongArch,導(dǎo)致編譯前的檢查通不過。在ARM64的電腦上,只是錯誤日志中的loongarch64會變?yōu)閍arch64,其它內(nèi)容都一樣。

解決方法:

  對下列文件進行修改??梢栽趕rc目錄下搜索config.sub,把找到的文件一個一個打開,修改后保存。

$SPEC/tools/src/make-3.82/config/config.sub

$SPEC/tools/src/xz-5.0.0/build-aux/config.sub

$SPEC/tools/src/expat-2.0.1/conftools/config.sub

$SPEC/tools/src/rxp-1.5.0/config.sub

$SPEC/tools/src/specinvoke/config.sub

$SPEC/tools/src/specsum/build-aux/config.sub

$SPEC/tools/src/tar-1.25/build-aux/config.sub

  在文件中搜索 “# Some are omitted here because they have special meanings below.”和“# Recognize the basic CPU types with company name.”(不含引號)這兩個字符串,字符串下面的內(nèi)容是已知的CPU類型列表。需要把“l(fā)oongarch64”按照相同的格式添加到列表中。如果是ARM64的架構(gòu),就添加“aarch64”。

  例如:

找到:# Some are omitted here because they have special meanings below.

把下一行:1750a | 580 \

修改為:1750a | 580 | loongarch64 \

---------------------------------

找到:# Recognize the basic CPU types with company name.

把下一行:580-* \

修改為:580-* | loongarch64-* \


3.出現(xiàn)`__alloca'未定義的錯誤

輸出的錯誤日志:

linking make...

/usr/bin/ld: glob.o: in function `.L38':(.text+0x514): undefined reference to `__alloca'

/usr/bin/ld: glob.o: in function `.L49':(.text+0x704): undefined reference to `__alloca'

/usr/bin/ld: glob.o: in function `.L51':(.text+0x780): undefined reference to `__alloca'

/usr/bin/ld: glob.o: in function `.L57':(.text+0x830): undefined reference to `__alloca'

/usr/bin/ld: glob.o: in function `.L148':(.text+0x15cc): undefined reference to `__alloca'

/usr/bin/ld: glob.o:(.text+0x1694): more undefined references to `__alloca' follow

錯誤說明:

  SPEC CPU 2006的工具代碼中,部分函數(shù)聲明與新版本的GCC頭文件中有差異,出現(xiàn)了代碼兼容性問題。

解決方法:

  本來我嘗試在命令行參數(shù)中加上CFLAGS='-U __GNU_LIBRARY__ -U __alloca',但沒有起作用,于是只好修改glob.c文件中的宏。

  修改文件:$SPEC/tools/src/make-3.82/glob/glob.c

找到#if !defined __alloca && !defined __GNU_LIBRARY__和配對的#endif,把這兩行前面加注釋符號“//”,屏蔽掉這兩行。下面修改完成之后的樣子,修改的是第一行和最后一行:

//#if !defined __alloca && !defined __GNU_LIBRARY__

# ifdef __GNUC__

#? undef alloca

#? define alloca(n) __builtin_alloca (n)

# else /* Not GCC.? */

#? ifdef HAVE_ALLOCA_H

#? ?include <alloca.h>

#? else /* Not HAVE_ALLOCA_H.? */

#? ?ifndef _AIX

#? ? ifdef WINDOWS32

#? ? ?include <malloc.h>

#? ? else

extern char *alloca ();

#? ? endif /* WINDOWS32 */

#? ?endif /* Not _AIX.? */

#? endif /* sparc or HAVE_ALLOCA_H.? */

# endif /* GCC.? */

# define __alloca alloca

//#endif


4.出現(xiàn)'gets' undeclared here的錯誤

輸出的錯誤日志:

./stdio.h:459:1: error: 'gets' undeclared here (not in a function); did you mean 'fgets'?

?_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

?^

錯誤說明:

  仍然是依賴庫版本升級造成的代碼兼容性問題。

解決方法:

  修改下面兩個文件

$SPEC/tools/src/specsum/gnulib/stdio.in.h

$SPEC/tools/src/tar-1.25/gnu/stdio.in.h

  找到文件中下面的內(nèi)容,注釋掉 It it very …… use fgets instead"); 這一段。修改完成后的樣子如下,注意/*...*/的范圍

/* It is very rare that the developer ever has full control of stdin,

? ?so any use of gets warrants an unconditional warning.? Assume it is

? ?always declared, since it is required by C89.??

#undef gets

_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/

#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

#endif

5.大量出現(xiàn)pow、floor、fmod、sin等函數(shù)未定義的錯誤:

輸出的錯誤日志:

? ? miniperlmain.o opmini.o perlmini.o?

/usr/bin/ld: pp.o: in function `.L967':(.text+0x3aa0): undefined reference to `pow'/usr/bin/ld: pp.o: in function `.L876':

……省略掉一部分,節(jié)省篇幅

/usr/bin/ld: pp_sys.o: in function `Perl_pp_gmtime':(.text+0xe7ec): undefined reference to `floor'

/usr/bin/ld: (.text+0xe94c): undefined reference to `floor'

/usr/bin/ld: pp_pack.o: in function `.L704':(.text+0x1a48): undefined reference to `floor'

/usr/bin/ld: (.text+0x1a70): undefined reference to `floor'

/usr/bin/ld: pp_pack.o: in function `.L723':(.text+0x1ab4): undefined reference to `floor'

錯誤原因:

  perl編譯過程中未引入數(shù)學(xué)庫。

解決方法:

  在$SPEC/tools/src/buildtools文件中關(guān)于perl編譯部分的./configure 命令行的上面加入 export PERLFLAGS=”-A libs=-lm -A libs=-ldl”?即可。注意空格和引號,如果復(fù)制過去有問題,可以手工輸入。

? ? export LD_LIBRARY_PATH DYLD_LIBRARY_PATH

? ? export PERLFLAGS=”-A libs=-lm -A libs=-ldl”

? ? ./Configure -dOes -Ud_flock $PERLFLAGS -Ddosuid=undef -Dprefix=$INSTALLDIR -Dd_bincompat3=undef -A ldflags=-L${INSTALLDIR}/lib -A ccflags=-I${INSTALLDIR}/include -Ui_db -Ui_gdbm -Ui_ndbm -Ui_dbm -Uuse5005threads ; testordie "error configuring perl"

6.PERL部分測試項目沒通過

輸出的錯誤日志:

Hey! Some of the Perl tests failed! If you think this is okay, enter y now:

錯誤原因:

  就像日志中說的,一些Perl測試失敗。

解決方法:

  這不是什么大問題,完全不需要緊張。這句話的語氣很輕松:“嘿!一些 Perl 測試失敗了!如果你認(rèn)為這沒問題,現(xiàn)在輸入 y:”,這種時候,當(dāng)然毫不猶豫地輸入一個字母“y”。

7.Test Summary Report 測試通不過

輸出的錯誤日志:

Test Summary Report-------------------

t/getdate.t (Wstat: 0 Tests: 0 Failed: 0)

? Parse errors: Bad plan.? You planned 146 tests but ran 0.

Files=5, Tests=311,? 0 wallclock secs ( 0.06 usr? 0.00 sys +? 0.09 cusr? 0.01 csys =? 0.16 CPU)

Result: FAIL

Failed 1/5 test programs. 0/311 subtests failed.

make: *** [test_dynamic] Error 255

錯誤原因:

  是$SPEC/tools/src/TimeDate-1.20/t/getdate.t這個perl程序的代碼有問題,我不確定是代碼本身的bug還是在系統(tǒng)和基礎(chǔ)庫等升級后,造成這個perl程序的執(zhí)行結(jié)果和預(yù)期不一致。我在x86和ARM架構(gòu)的電腦上測試這個程序,也全是輸出“FAIL”,在它所在的文件夾下輸入命令 perl getdate.t,和在LoongArch的3A5000上是一樣的現(xiàn)象:

  從測試結(jié)果可以排除龍芯平臺的問題,因為在x86和ARM平臺上也會出問題。手上有SPEC CPU 2006光盤鏡像的朋友,請幫忙試試您的getdate.t是不是也這樣?

解決方法:

  打開getdate.t這個文件,找到“$time_expect += $offset;”這一行,刪除掉或加注釋符號屏蔽掉它,然后就能測試通過了。

  getdate.t測試的內(nèi)容,是把一系列的日期字符串轉(zhuǎn)換為時間戳,再與對應(yīng)的預(yù)置時間戳比較是否相等。僅在構(gòu)建測試工具的步驟用于測試日期函數(shù),在性能測試時不會用到(正常安裝不存在這些文件),因此修改了它的代碼也不會對性能測試環(huán)節(jié)有任何影響。SPEC CPU 2006的測試集是在benchspec文件夾中,這里面的內(nèi)容一定不要修改,一旦有修改就不能通過校驗,無法進行測試。

  Test Summary Report 是測試工具構(gòu)建流程的倒數(shù)第二項,如果不想修改代碼,也可以不理會這項測試,可以手工輸入下面的命令把編譯好的二進制文件復(fù)制到運行文件夾。

SKIPALL=1 DOCOPY=1 ./buildtools

  上面的DOCOPY就是最后一個步驟,相當(dāng)于安裝,但只是安裝了測試工具的二進制文件,測試集是之前解壓出來的。

  按照SPEC官網(wǎng)上的說明,把測試工具構(gòu)建完成后還有一個打包的步驟。打包是為了分發(fā),別人拿到打好的包可以直接用./install.sh安裝。因為我只是自己測試,不需要分發(fā)安裝包,所以忽略掉打包的流程。

  至此,SPEC CPU 2006的測試工具就在使用LoongArch架構(gòu)的3A5000上編譯通過了,接下來就可以試試用SPEC CPU 2006跑分。

使用SPEC CPU 2006給3A5000簡單地跑個分

  使用SPEC CPU 2006跑分,需要先創(chuàng)建一個用于編譯測試集的配置文件,在這個文件中可以填寫base(基本)和peak(峰值)兩種測試模式的編譯參數(shù),這兩種測試模式都包含了int(整數(shù))和fp(浮點)性能的測試集。

  如果測試base模式性能,那么必須所有的測試子項使用相同的編譯優(yōu)化參數(shù),但可以為每一個子項指定不同的用于解決移植性問題的參數(shù)。比如部分子項必須指定 -std=gnu89 或 -std=gnu90 才能編譯通過,這樣的參數(shù)不影響性能,僅影響代碼的可移植性。

  因為同一組編譯優(yōu)化參數(shù)并不能使所有類型的程序都得到較好的優(yōu)化,有的參數(shù)對有的代碼性能甚至有反作用,所以base的目的就是找出一組能夠使所有測試子項成績都不太差的優(yōu)化參數(shù)組合,作出一定的取舍,使總成績達(dá)到較優(yōu)的狀態(tài)。這個優(yōu)化參數(shù)的組合,可以用于指導(dǎo)大型軟件的編譯,求得編譯復(fù)雜度和性能的平衡。

  如果測試peak模式的性能,就允許對每一個測試子項配置不同的編譯優(yōu)化參數(shù),盡量使每一個子項的成績都相對最好,盡可能地壓榨CPU性能,力求得到CPU的最高測試成績。SPEC官網(wǎng)上的那些CPU的測試成績,絕大多數(shù)都是使用的ICC編譯器,這是Intel專為x86架構(gòu)設(shè)計的極致優(yōu)化的編譯器,且在測試了開啟了自動并行跑出的peak成績。通常的軟件項目中很少會使用ICC編譯器,一因為ICC要求源代碼符合它的規(guī)范,否則程序被ICC極端優(yōu)化后運行不穩(wěn)定的情況相對較多,二是因為ICC用于商業(yè)項目有較嚴(yán)格的授權(quán)限制。

  下面就開始在龍芯3A5000上開始一次實際的SEPC 2006測試。這個測試非常耗時,特別是為了找出較優(yōu)的編譯參數(shù)而需要反復(fù)調(diào)整反復(fù)運行,每完整地測試一輪就需要數(shù)小時,每修改一次參數(shù)就需要運行一次進行驗證,對時間和精力消耗很大。因此我就只測試base模式的int單核成績,參數(shù)也不是最優(yōu),僅是比較常見的優(yōu)化參數(shù)。

1.編寫SPEC CPU 2006測試配置文件

  在$SPEC/config中有一些配置文件的例子,可以把其中的 Example-linux64-amd64-gcc41.cfg 在相同文件夾中復(fù)制一份,改成自己喜歡的文件名,例如 3A5000.cfg,然后在此基礎(chǔ)上進行修改。我是偶得了一份某知名整機企業(yè)用GCC測試Intel某款CPU base成績的配置文件,格式比較規(guī)整,作了一些適應(yīng)性修改就開始測試龍芯3A5000了。主要的改動是把原編譯參數(shù)中啟用向量指令的“-msse4.2”換成了支持LoongArch向量指令集的“-mlxs -mlasx”,對“-march”和“-mbi”也有修改。

  配置文件的詳細(xì)說明請參閱SPEC官網(wǎng)上的《SPEC CPU2006 Config Files》。我在學(xué)習(xí)的過程中,按照自己的理解給一些配置上加了中文注釋,修改后的配置文件內(nèi)容如下:

backup_config? = 0? ? ? ? ?# 0:運行benchmark時不備份配置文件。

ignore_errors? = yes? ? ? ?# 1或yes:子項運行時出錯時仍然繼續(xù)進行后續(xù)測試。reportable測試時此選項會被忽略。

action? ? ? ? ?= validate? # validate:構(gòu)建(如果需要)、運行、檢查正確性并生成報告。

tune? ? ? ? ? ?= base? ? ? # 默認(rèn)的測試類型,也可以寫 peak,或者 all,可在runspec參數(shù)中指定。

check_md5? ? ? = 1? ? ? ? ?# 通過MD5來驗證配置文件是否與已編譯的測試集二進制文件匹配,如果不匹配就強制重新編譯。

reportable? ? ?= 1? ? ? ? ?# 1或yes:默認(rèn)為產(chǎn)生正式報告的測試,int或fp對應(yīng)的測試集中會完整運行3遍。

mean_anyway? ? = 1? ? ? ? ?# 1或yes:即使部分子項運行失敗,也總是計算總成績,正式測試時忽略該選項。

verbose? ? ? ? = 9? ? ? ? ?# 測試過程中輸出調(diào)試信息的詳細(xì)程度,級別為1到99。

output_format? = asc, csv,html, screen, pdf, config #需要輸出測試報告的類型,當(dāng)screen存在且verbose>=9時,每個子項測試完成后會在屏幕上立即顯示成績。

makeflags? ? ? = -j 4? ? ? # 并行編譯的數(shù)量,加快測試項目的編譯速度。

flagsurl000? ? = $[top]/config/flags/flags-gcc-linux64-loongarch.xml? ? #指定描述編譯器參數(shù)的配置文件。這個文件告知測試工具哪些參數(shù)是用于性能優(yōu)化的,哪些參數(shù)是用于解決代碼可移植性問題的。

teeout? ? ? ? ?= 0? ? ? ? ?#設(shè)置為0時,運行benchmark時不顯示運行的命令行


# 把任務(wù)綁定到CPU。下面配置為單CPU,每CPU有4個核心。?

# 對于其它類型的CPU可能需要對應(yīng)修改。

# 本設(shè)置對于Speed(單核)測試沒什么意義,對Rate(多核)測試有一點增益。

bind0? = numactl -m 0 --physcpubind=0

bind1? = numactl -m 0 --physcpubind=1

bind2? = numactl -m 0 --physcpubind=2

bind3? = numactl -m 0 --physcpubind=3


submit = $BIND $command


# 設(shè)置編譯器,下面 int 和 fp 分別表示編譯int測試集和fp測試集的編譯器

int=default=default=default:

CC? ? ? ? ? ? = gcc

CXX? ? ? ? ? ?= g++

OBJ? ? ? ? ? ?= .o


fp=default=default=default:

CC? ? ? ? ? ? = gcc

CXX? ? ? ? ? ?= g++

FC? ? ? ? ? ? = gfortran

OBJ? ? ? ? ? ?= .o


#####################################################################

# 編譯器優(yōu)化參數(shù)

####################################################################

default:

M64_OPT? ? ? = -mabi=lp64 -Ofast -mlsx -mlasx -flto

AVX? ? ? ? ? = -march=loongarch -mtune=loongarch

UNROLL? ? ? ?= -funroll-all-loops

FASTNOSTATIC = $(M64_OPT) $(AVX) $(UNROLL)

FASTSTATIC? ?= $(FASTNOSTATIC) -static


################################################################

# Base 模式的編譯器優(yōu)化參數(shù),測試 int 性能時使用。

################################################################

int=base=default=default:

COPTIMIZE? ? = $(FASTSTATIC)

CXXOPTIMIZE? = $(FASTSTATIC)

FOPTIMIZE? ? = $(FASTSTATIC)


################################################################

# Base 模式的編譯器優(yōu)化參數(shù),測試 fp 性能時使用。

################################################################

fp=base=default=default:

FOPTIMIZE? ? = $(FASTSTATIC)

COPTIMIZE? ? = $(FASTSTATIC)

CXXOPTIMIZE? = $(FASTSTATIC)


#####################################################################

# 32/64 bit,為解決代碼可移植性而添加的編譯器參數(shù),寫在 PORTABILITY 后面。

#####################################################################

default:

PORTABILITY = -DSPEC_CPU_LP64


#####################################################################

# 測試集各個子項的可移植性參數(shù)標(biāo)識,為解決默認(rèn)時代碼與編譯器或其它庫的兼容性問題。

#####################################################################


400.perlbench=default=default=default:

CPORTABILITY = -DSPEC_CPU_LINUX_X64 -std=gnu90


401.bzip2=default=default=default:

CPORTABILITY = -DSPEC_CPU -fno-strict-aliasing


462.libquantum=default=default=default:

CPORTABILITY=? -DSPEC_CPU_LINUX


483.xalancbmk=default=default=default:

CXXPORTABILITY = -DSPEC_CPU_LINUX -std=c++03


#################################################################

# 下面是計算機的相關(guān)信息

#################################################################

default=default=default=default:

license_num? ? ? =

test_sponsor? ? ?= guee

tester? ? ? ? ? ?= guee

hw_avail? ? ? ? ?= May-2021

sw_avail? ? ? ? ?= July-2021


hw_cpu_char? ? ? = Loongson-3A5000

hw_cpu_mhz? ? ? ?= 2500

hw_fpu? ? ? ? ? ?= Integrated

hw_memory? ? ? ? = 16 GB (2 x 8GB DDR4 3200)

hw_model? ? ? ? ?= Loongson-3A5000?

hw_parallel? = no


hw_ncores = 4

hw_ncoresperchip = 4

hw_nthreadspercore = 1

hw_nthreads? = 4

hw_ncpuorder = 1


hw_other? ? ? ? ?= None

hw_pcache? ? ? ? = 64KB I + 64KB D on chip per core

hw_scache? ? ? ? = 256kB I+D on chip per core

hw_tcache? ? ? ? = 16384KB I+D on chip per chip

hw_ocache? ? ? ? = None

hw_vendor? ? ? ? = Loongson


int=default=default=default:

sw_compiler001? ?= gcc/g++ 8.3

sw_base_ptrsize? = 64-bit

sw_peak_ptrsize? = 64-bit


fp=default=default=default:

sw_compiler? ? ? = gcc/g++/gfortran 8.3

sw_base_ptrsize? = 64-bit

sw_peak_ptrsize? = 64-bit

sw_parallel_other = no

  注意 “flagsurl000” 那一行,指向的是一個 xml 文件,作用是對編譯器的各項參數(shù)進行描述。讓SPEC CPU 2006的測試工具知道配置的各種編譯參數(shù),哪些是用于性能優(yōu)化的,哪些是用來解決代碼可移植性問題的。如果缺少這個文件,或者實際用到的編譯參數(shù)在文件中找不到,并不會影響測試成績,只是不符合測試報告的規(guī)范,因此測試報告中會被打上“Invalid Run”標(biāo)記。

 2.3A5000的 SPEC CPU 2006 int_base 單核實測成績

  在終端進入安裝或解壓SPEC CPU 2006的文件夾,我的在“ /home/guee/cpu2006”中。剛才為3A5000編寫的配置文件名是“3A5000.cfg”,就輸入下方的命令:

. ./shrc

runspec -c 3A5000 int

  注意第一行的兩個“.”之間有一個空格,第二行的3A5000是配置文件名,擴展名為.cfg就可以不寫擴展名。輸入完成后測試工具會自動讀取配置文件,檢查測試環(huán)境,之后開始編譯int的測試集。編譯完成后會自動把測試集中所有子項運行3次,最后給出的測試成績計算方式是:是把每個子項的3次成績?nèi)≈形恢翟偾笏阈g(shù)平均。

  我測試的3A5000整機CPU頻率為2.5GHz,內(nèi)存是整機原配的DDR4 3200,8G * 2。不過由于龍芯自己設(shè)計的內(nèi)存控制器水平和Intel相比還有差距,因此并不能發(fā)揮出DDR4 3200的全部性能。使用上面的配置文件實測3A5000的int_base成績?yōu)?6.6,下圖是截圖自PDF版的測試報告,如果需要SEPC CPU 2006測試報告的原始文件,可以私信我。

  可以看到,我測試出的int_base成績?yōu)?6.6,完全符合龍芯官方公布的“26分+”的成績,感覺龍芯還留出了較大的冗余。由于工作緣故,我沒有時間去對各種優(yōu)化參數(shù)一一組合驗證,GCC的優(yōu)化參數(shù)非常多,我只是選用了幾個常用的優(yōu)化參數(shù),實在算不上復(fù)雜。雖然也經(jīng)過了幾輪簡單的調(diào)優(yōu),但和SPEC官網(wǎng)上那些測試報告中的配置文件相比,單薄得就像春天的草芽。

  至于fp_base成績以及多核成績,還有各種模式下的peak成績,以后再測試了。這篇文件主要是介紹如何在SPEC CPU 2006沒有預(yù)編譯二進制支持的情況下,在一種新架構(gòu)CPU上編譯運行SPEC CPU 2006對CPU性能進行測試。

SPEC CPU 2006測試報告解讀

  SPEC CPU 2006在測試完成后,會根據(jù)設(shè)置生成如 pdf、html、cvs 等各種格式的測試報告。以上圖中的pdf格式測試報告為例,只測試int_base的話一般總共有4頁,每一頁的前3行內(nèi)容都一樣。第一行是標(biāo)題,第二行左邊是CPU名稱和公司名稱,以及測試者等相關(guān)信息,都是在配置文件中填寫的。第二行右邊是測試成績,“SPECint2006”是peak成績,本次沒有測試,“SPECint_base2006”是base成績。如果是測試的浮點,則“int”會換成“fp”,如果是測試的多任務(wù)并行,標(biāo)簽中還會加上“rate”的文字。

  第1頁中間是每個子項的成績線條形圖,每條橫線上有3個可能不重合的短豎線,表示三次測試中每次的成績,數(shù)字是三次成績的中位值,總成績是使用中位值作為有效成績來計算。下方的“Hardware”和“Software”中的內(nèi)容大部分是測試者填寫在配置文件中的,只有少數(shù)項目,如操作系統(tǒng)的名字是自動獲取。

  后面的第2頁“Results Table”是每一輪測試的詳細(xì)成績表格,字體加粗的數(shù)字是三次測試成績的中位值。除了表現(xiàn)方式不同,實際內(nèi)容和第1頁的條形圖一樣。下面的“Platform Notes”除了部分來自配置文件的填寫外,還有SPEC CPU 2006測試工具調(diào)用系統(tǒng)命令得到的系統(tǒng)信息,這部分內(nèi)容一般會延續(xù)到下一頁。

  第3頁和第4頁上值得注意的,就是“Base Portability Flags”和“Base Optimization Flags”了,從這兩項可以看出來測試時使用了哪些編譯器參數(shù)。如果沒有原始配置文件,也可以通過這里的參數(shù)說明獲得編譯選項,對測試結(jié)果進行驗證。



SPEC CPU 2006測試參數(shù)

  SPEC CPU 2006運行Benchmark的命令是runspec,這個命令的參數(shù)很多。輸入 “./runspec -h” 可以看到runspec的所有參數(shù),有許多參數(shù)是以別名的形式存在,和另外不同名稱的參數(shù)功能相同。我個人不喜歡這種參數(shù)設(shè)計,無端地增加了參數(shù)的數(shù)量,甚至一個字母的大小寫會用于表示的完全不相干的功能,更加容易造成混淆。

  在這里我介紹一些常用的參數(shù),靈活使用有助于節(jié)省時間。當(dāng)參數(shù)名和配置文件中的字段名相同時,輸入的參數(shù)優(yōu)先于配置文件的設(shè)置。

--config?name,-c?name

   指定 runspec 使用的配置文件,文件在$SPEC/config中查找。如果配置文件的擴展名為.cfg,就可以只輸入文件名。如果不使用這個參數(shù),默認(rèn)使用default.cfg。

  舉例:runspec -c 3A5000 int,以3A5000.cfg為配置文件,測試int成績。

--action?action,-a?action

指定 runspec 執(zhí)行的操作,下面僅列舉常用的操作:

  validate:默認(rèn)值,如果配置有變化就執(zhí)行編譯,然后運行Benchmark并給出測試報告。

  build:僅執(zhí)行編譯。

  clean:消除編譯結(jié)果。

  舉例:runspec -c 3A5000 -a build int,以3A5000.cfg為配置文件,編譯int測試集。

--reportable,-s,--strict,--noloose

  進行有正式報告的Benchmark??稍谂渲梦募性O(shè)置reportable的默認(rèn)值。

  舉例:runspec -c 3A5000 -reportable fp,以3A5000.cfg為配置文件,進行有正式報告的fp性能測試。

--tune?tuning,-T?tuning

   指定測試的級別,tuning?可為 base、peak、all。如果需要正式報告,則只能使用 base 或 all。

  舉例:runspec -c 3A5000 --tune peak fp,以3A5000.cfg為配置文件,按照文件中的peak編譯配置測試fp成績。

--size?size,-i?size

  指定測試的數(shù)據(jù)規(guī)模,size有三種數(shù)據(jù)規(guī)模,按從小到大分別為test、train、ref。

  test和train主要是用于驗證編譯完成的測試項目是否能正常運行,運行后即會給出運行時間。使用ref才能得到正確的測試成績。如果是reportable方式的運行,會自動按順序測試這三種測試數(shù)據(jù)。

  舉例:runspec -c 3A5000 -a -i test fp,以3A5000.cfg為配置文件,使用testt的數(shù)據(jù)嘗試運行fp測試項目。

--iterations?number,-n?number

   指定Benchmark運行的次數(shù),有時調(diào)整了編譯參數(shù)后,只是想看看對測試結(jié)果的影響,就只需運行一次,也可以運行很多次。

  舉例:runspec -c 3A5000 --tune peak -n 1 fp,以3A5000.cfg為配置文件,按照文件中的peak編譯配置測試fp成績,只運行一次。

--rate?[copies],-r?[copies]

   指定Benchmark并行運行的數(shù)量,用于測試rate性能。copies?不必一定等于CPU核心數(shù)量,大于或小于CPU核心數(shù)量都是允許的。默認(rèn)為speed方式運行。

  舉例:runspec -c 3A5000 -r 4 all,以3A5000.cfg為配置文件,測試并行4個任務(wù)時int和fp的rate成績。

只運行指定的測試項目:

在上面的各個例子中,出現(xiàn)過int、fp、all,如果想要只運行指定的一個或多個測試項目也是可以的,只要把int、fp或all換成測試項的編號或名字即可。例如:

  runspec -c 3A5000 401.bzip2

  runspec -c 3A5000 459 465

  runspec -c 3A5000 sjeng mcf astar

  對runspec更加詳細(xì)的說明,請參閱SPEC官網(wǎng)的《The 'runspec' Command》

關(guān)于測試結(jié)果的報告文件中“Invalid Run”的文字和水印

  測試結(jié)果的報告中被加上“Invalid Run”的文字和水印是很常見的,只要測試有一點不符合規(guī)范就會出現(xiàn)這樣的問題。如果是自娛自樂的測試,“Invalid Run”標(biāo)記就沒有什么關(guān)系,但這樣的測試報告是不能給別人展示的。網(wǎng)上其它關(guān)于SPEC CPU 2006的文章中,我沒有找到關(guān)于“Invalid Run”的說明,因此在這里簡述一下。

  當(dāng)測試報告中出現(xiàn)“Invalid Run”的文字和水印時,在測試報告表格中,會有專門的一欄列出本次測試出現(xiàn)的所有問題,這些問題一般是由兩種原因造成的:

1.測試者本身就沒打算要正式的測試報告

  配置文件中沒有寫“reportable= yes”,runspec運行參數(shù)也沒有加“--reportable”?;蛘咧付藴y試次數(shù)不是3次,或者指定了只測試某個子項。

  SPEC CPU 2006的測試需要完全正確地運行3次之后,才給出正式的測試報告。有趣的是,SPEC官網(wǎng)上的《SPEC CPU2006 System Requirements》一文中,把測試過程中出現(xiàn)的運行錯誤稱為“Mysterious Failures(神秘故障)”。在SPEC看來,測試項目偶爾出錯是無法避免的,也難以追蹤到原因,因此不打算解決這個問題。對于3A5000這種使用全新架構(gòu)的計算機來說,各種基礎(chǔ)庫才剛剛完成移植,GCC編譯器也才加上對LoongArch指令集的支持,出現(xiàn)bug的機率更大,某些測試子項偶爾運行出錯的機率也更高。

  在需要給出正式報告的測試中,一旦任何子項運行中出錯,測試過程就會終止。如果不要求正式報告,那么可以設(shè)置子項測試出錯后繼續(xù)運行后續(xù)項目,每個子項出錯一次對總成績不會有明顯影響。如果某個子項在3次運行中出錯了2次或3次,那么就需要考慮編譯參數(shù)是否正確,可能需要調(diào)整后再重新測試。

2.編譯器符號描述文件不正確

  這種情況很常見,SPEC CPU 2006給出的配置文件范例中都有flagurl這一項,例如“Example-linux64-amd64-gcc41.cfg”中引用的就是“Example-gcc4x-flags-revA.xml”作為編譯器符號描述文件。

flagsurl0? ? ?= $[top]/config/flags/Example-gcc4x-flags-revA.xml

flagsurl1? ? ?= $[top]/config/flags/Example-linux-platform-revA.xml

  編譯器符號描述文件的作用是:告訴SPEC CPU 2006測試工具,本次測試使用到的每一個編譯器參數(shù)的格式和作用。詳細(xì)說明見SPEC官網(wǎng)的《SPEC CPU2006 Flag Description Format》

  編譯器參數(shù)分為兩類,分別是用于性能優(yōu)化的和用于解決代碼可移植性的。比如 -O2、-Ofast、-march=xxxx這些就是用于性能優(yōu)化的,而-std=gnu89、-mabi=64這樣的就是處理代碼可移植性的標(biāo)記。SPEC CPU 2006測試工具需要明確地知道每一個參數(shù)的分類,而參數(shù)描述則由測試者自己提供。“Example-gcc4x-flags-revA.xml”這個文件中只支持了GCC4.x的不完整的參數(shù)描述,只要在測試中使用了沒被編譯器符號描述文件涵蓋的編譯器參數(shù),測試報告中就會出現(xiàn)“Invalid Run”的標(biāo)識。

  我們可以做一個實驗來驗證一下:

  在x86電腦上正常安裝SPEC CPU 2006,配置文件使用“Example-linux64-amd64-gcc41.cfg”做一些適應(yīng)性修改。主要是給一些測試項參數(shù)加上 “-std=gnu89”或“-std=c++98”,運行完成后我們看看在測試報告中指出的錯誤是什么:

  這次測試的唯一錯誤就是有一些標(biāo)記是未知的,測試報告中還會列出那些未知的標(biāo)記到底是什么,出現(xiàn)在了哪些地方:

  可以看到未知的標(biāo)志就是“-std=gnu89”,而“-std=c++98”則是可以被識別的。

  解決這個問題的方法,就是要有一個合適的編譯器符號描述文件。如果是用的ICC編譯器,那么可以去spec官網(wǎng)找現(xiàn)成的。測試者在向spec官網(wǎng)提交測試報告的同時,就會把測試配置文件和編譯器符號描述文件也一并提交上去。

  但spec官網(wǎng)上少有使用GCC的測試成績,且要么版本過低,要么是魔改版,我們拿來也沒法用。因此我們在用較高版本的GCC測試時,就需要自己編寫編譯器符號描述文件??梢詤⒖肌癊xample-gcc4x-flags-revA.xml”中的內(nèi)容進行修改,在spec官網(wǎng)上有詳細(xì)的格式說明。只是編寫這個文件太麻煩了,如果咱們測試只是為了自娛自樂,完全沒有必要理會,反正也不會影響到測試成績。我測試3A5000時倒是自己編寫了一個,只寫上了我測試中需要用到的編譯參數(shù)。

  比如龍芯提供的的GCC8.3編譯器中,啟用LoongArch指令集的向量指令有兩個參數(shù),分別是 -mlsx 和 -mlasx,要想讓SPEC CPU 2006測試工具認(rèn)識這兩個參數(shù),在編譯器符號描述文件就可以加入下面的內(nèi)容。

<flag name="f-mlsx" class="optimization" regexp="-mlsx(?=\s|$)">

? <example>-mlsx</example>

? <![CDATA[<p>mlsx.</p>]]>

</flag>

<flag name="f-mlasx" class="optimization" regexp="-mlasx(?=\s|$)">

? <example>-mlasx</example>

? <![CDATA[<p>mlasx.</p>]]>

</flag>

  XML屬性“class="optimization"”表示這個參數(shù)是用于性能優(yōu)化,對于“std=gnu98”這種用于處理代碼移植問題的編譯參數(shù),需要把“class”屬性的值指定為“portability”。

<flag name="stdgnu" class="portability" regexp="(?:/\S+/)?-std=gnu(\S+)\b">

? ?<![CDATA[

? ? ? <p>Tells the compiler to conform to a specific language standard.</p>

? ?]]>

</flag>

  SPEC CPU 2006測試工具通過“class”屬性來檢查base測試時,是否為某測試項單獨指定了“optimization”參數(shù)。參數(shù)類型是寫“optimization”還是“portability”,也不全靠xml文件編寫者的自覺,因為測試報告中會寫上各種編譯設(shè)置,向spec官網(wǎng)上傳測試報告時,還會附帶上這個xml格式的標(biāo)記配置文件。“regexp”屬性中是一個正則表達(dá)式,用于匹配對應(yīng)的參數(shù),CDATA中的內(nèi)容是對標(biāo)記作用的文字說明。

  本文告結(jié),最后希望大家如果手中有3A5000的電腦,都試一試,測一測。如果沒有,也支持折騰一下其它的電腦,比如我使用與上面測3A5000時對等的編譯配置去測試i5-4460,常態(tài)下測出的SPEC CPU 2006_int_base成績,就和3A5000差不多,僅27分。不過把i5-4460的運行頻率鎖定在3.4GHz后,測試成績就要比3A5000高多了,超過了36分。但折算到與3A5000相同頻率后的成績?nèi)匀徊畈欢?,說明當(dāng)它自動頻率控制時,Benchmark時的平均頻率也是2.5GHz左右。另外,估計是因為i5-4460的功耗太高,鎖頻跑了幾輪后,這臺電腦就壞掉了……成為了本次測試的消耗品。沒事兒時測一測各種電腦也是很有意思的事情,只不過每次修改了編譯參數(shù)后完整測試,都要等幾個小時才能看到結(jié)果,適合睡前測試,風(fēng)扇助眠。


在龍芯3A5000上測試SPEC CPU 2006的評論 (共 條)

分享到微博請遵守國家法律
刚察县| 德兴市| 尼木县| 桃源县| 峨山| 琼中| 宝鸡市| 仁怀市| 鹿邑县| 海门市| 肇源县| 股票| 土默特右旗| 东海县| 遂川县| 体育| 潜山县| 苍南县| 夏河县| 那曲县| 迭部县| 定襄县| 潞西市| 朝阳区| 太原市| 涞水县| 手机| 肇州县| 延川县| 华安县| 罗定市| 静宁县| 连城县| 双鸭山市| 通海县| 凤凰县| 琼中| 遂溪县| 绍兴市| 邯郸县| 安义县|