處理器的評估其實是一個很復雜的事情。很多軟件、機構都在做相關的工作,但是往往大家都會在表象層面進行討論。其背后的問題其實并不復雜,但是由于手機、電腦廠家為了用一個量化的“數值”來標榜自己,所以會針對這個分值進行優(yōu)化,特別是一些KPI文化的廠家,手機跑分很牛,打游戲卻很卡。其背后的原因,我們理解處理器的評估方法之后,就很清楚了。
1、主頻
我們知道“身大力不虧”,如果跟一個大體重、大身高的對手打架,對方的基礎數據是非常說明實力的。我們一般觀測一個處理器水平如何,一般我們首先先看主頻數值,和處理器的核數。
主頻也叫時鐘頻率,單位是Hz,用來表示CPU的運算速度。它決定計算機的運行速度,隨著計算機的發(fā)展,在同系列微處理器,主頻越高就代表計算機的速度也越快,但對于不同類型的處理器,它就只能作為一個參數來作參考。另外CPU的運算速度還要看CPU的流水線的各方面的性能指標。由于主頻并不直接代表運算速度,所以在一定情況下,很可能會出現主頻較高的CPU實際運算速度較低的現象。因此主頻僅僅是CPU性能表現的一個方面,而不代表CPU的整體性能。
這也就是說一個人如果又高又壯,但是未必能打得過泰森。拳擊比賽,身高體重一定有優(yōu)勢,但是不是勝負的評判標準。類比于人腦,就是說,反應快,但未必智商高。但是智商高的人,反應一般都快。
但是,如果是相同的處理器架構,則主頻高,一定會比相同處理器架構的要強。也就是說,同比例放大泰森到身高兩米,力量也同比例放大,再跟泰森本人PK。那么放大版泰森必勝。如下圖中TPU的處理器內核是8核的Cortex-A53,但是處理器主頻卻高達2.3GHz,那么它一定比同為8核A53的其他處理器性能強。在其他條件相同的的情況下,處理器的主頻彰顯處理器實力。
對于我們買電腦的時候也一樣,如果選擇X86處理器的時候,我們選擇AMD的處理器,有時主頻非常高,但未必有Intel處理器跑得流暢。如果我們同時選擇Intel的處理器,但是第幾代酷睿,i3、i5、i7、i9確定的前提下,主頻越高越好。但是主頻高的9代i3未必有更低主頻的11代酷睿i5好用。
也就是說姚明雖然又高又壯,但是應該是打不過泰森的。
2、核數
核數多,就是多人作戰(zhàn)。多人,當然好,但是中國有句老話“一個和尚挑水喝、兩個和尚抬水喝,三個和尚沒水喝?!保m然多核沒有那么夸張。但是多核沒有調度好,可能也是白搭。
多核不一定會使你的手機或電腦速度更快,但它將提高你的PC或者硬件系統(tǒng)的整體性能,這是一個有所不同的細微的技術特色。多核處理器的性能提升并不是簡單CPU核心的倍數,因為受到兩(多)個核之間共享資源的拖累。比如雙核性能只是單核的1.4~1.8倍,實際情況取決于具體的應用。
首先跟實際應用有很大關系:
性能指標評測通常分為單核分數和多核分數。
單核分數與輕線程的游戲和應用程序更為相關,這意味著它們依靠單個內核來處理許多(但不是全部)指令。
多核分數與重線程的游戲和應用程序更相關,這意味著它們在多個內核之間分配指令。
您如何判斷游戲是輕線程還是重線程?
打開任務管理器。運行游戲后,在 Windows 10 中打開任務管理器 (CTRL+SHIFT+ESC) ,然后單擊“性能”選項卡。您會看到一個 CPU 使用率活動圖。
配置 CPU 圖表。右鍵單擊圖形,然后單擊“將圖形更改為邏輯處理器”。您會看到每個 CPU 內核上的負載將分別顯示出來。
比較內核活動。如果游戲內容不多,那么大部分活動將被隔離到一個內核。
從架構上區(qū)分
同構多核架構:系統(tǒng)中的處理器在架構上是相同的
異構多核架構:系統(tǒng)中的處理器在架構上是不同的
同構多核架構在硬件與軟件設計上比較簡單,通用性高。
異構多核處理器有:TI的達芬奇平臺DM6000系列(ARM9+DSP)、Xilinx的Zynq7000系列(雙核Cortex-A9+FPGA)、Cell處理器(1個64位POWERPC+8個32位協(xié)處理器)等等。
同構多核處理器有:Exynos4412,freescale i.mx6 dual和quad系列、TI的OMAP4460等,Intel的Core Duo、Core2 Duo等。
?從運行模式上區(qū)分:AMP/SMP/BMP
在軟件上區(qū)分的話,多核處理器有三種運行模式:
AMP(非對稱多處理)
SMP(對稱多處理)
BMP(受約束多處理)
AMP
AMP是指,多個核相對獨立地運行不同的任務,每個核之間相互隔離,可以運行不同的操作系統(tǒng)或裸機程序。
AMP運行模式
AMP的運行模式基本不會存在開銷問題,尤其是在運行裸機程序時,甚至沒有開銷,這種模式比較適合實時性高的應用。但是兩個核心之間的通信與資源共享需要有一套優(yōu)秀的處理機制。
雖然多個核心可以運行不同的系統(tǒng),但是需要有一個主要的核心,需要使用該核心來控制整個系統(tǒng)以及其他的核心。例如:一個核心運行運行實時性較高的任務,另一個核心運行UI界面。
AMP:
SMP:
SMP是指多個核心運行一個操作系統(tǒng),該操作系統(tǒng)同等的管理多個內核,這種運行模式就是簡單提高運行性能。目前支持該運行模式的操作系統(tǒng)有:Linux,Windows,Vxworks。
目前,我們的PC機使用的就是這種運行模式,一般適用于功能復雜,對實時性要求不高的系統(tǒng)。
SMP運行模式BMP
BMP運行模式與 SMP類似,同樣也是一個OS管理所有的核心,但開發(fā)者可以指定將某個任務僅在某個指定內核上執(zhí)行 。
多核的出現還讓系統(tǒng)設計變得更加復雜。如運行在不同內核上的應用為了互相訪問、相互協(xié)作,需要進行一些獨特的設計,如高效的IPC(進程間通信,interprocess communication)機制、共享內存的數據結構和同步原語(synchronization primitives)。
程序代碼遷移(code migration)也是個問題。大多數系統(tǒng)廠商都在針對單核CPU架構的代碼庫上進行了大量投資。因而,這些公司需要有一個清晰的遷移策略,來使其代碼可以最大化地利用多核硬件資源。
針對多核設計的操作系統(tǒng)可能會大大減少解決上述挑戰(zhàn)所需的工作量,也可能增加另一些問題的復雜性。這全都取決于操作系統(tǒng)是如何支持多核芯片的多處理模式。多處理模式主要有以下三種:
非對稱多處理(Asymmetric multiprocessing,AMP) | 每個CPU內核運行一個獨立的操作系統(tǒng)或同一操作系統(tǒng)的獨立實例(instantiation) |
對稱多處理(Symmetric multiprocessing,SMP)? | 一個操作系統(tǒng)的實例可以同時管理所有CPU內核,且應用并不綁定某一個內核 |
混合多處理(Bound multiprocessing,BMP) | 一個操作系統(tǒng)的實例可以同時管理所有CPU內核,但每個應用被鎖定于某個指定的核心 |
但是有個處理器,其實就是將兩顆,或者多顆處理器集成在一起,可以看成是兩個完成獨立的處理器,都不像AMP那樣共享內存,有自己獨立的內存空間??梢钥闯墒峭耆毩⒌奶幚砥?,只不過從芯片的角度是一顆芯片。這種情況在有些場景下是有用的,例如一些工控場景,我們需要一個處理器單獨做一些事情,如果沒有這個處理器,我們會用一個MCU來單獨做一些實時性的任務。
3、流水線
處理器內核中的流水線越多,當然性能響應的會越好。但是流水線太多,在異常出現的時候,會導致計算回退,反而導致更低效率。
流水線處理概述
CPU主要工作方式:
順序
重疊
流水
和鋪地板的原理相似…
設指令工作方式分成取指令、分析、執(zhí)行指令
若各階段執(zhí)行時間相等,則共需3n t
優(yōu)點:控制簡單;
缺點:速度慢,機器各部件的利用率很低。
重疊(Overlap):在兩條相近指令的解釋過程中,某些不同解釋階段在時間上存在重疊部分。
包括一次重疊、先行控制技術和多操作部件并行。
將相鄰兩條指令的重疊時間再往前提前一個階段;T=3×t+(n-1)×t=(n+2)×t
一次重疊:把取指令操作隱含在分析、執(zhí)行指令過程中,則在任何時候只允許上條指令“執(zhí)行”與下條指令“分析”相重疊。T=(n+1)×t
若各段時間不等時,有實際執(zhí)行時間:
先行控制:分析部件和執(zhí)行部件能分別連續(xù)不斷地分析和執(zhí)行指令,預取和緩沖相結合的技術?,通過對指令流和數據流的先行控制,使指令分析器和執(zhí)行部件能盡量連續(xù)并行工作。
執(zhí)行時間:
多操作部件并行:采用有多個功能部件的處理機,把ALU的多種功能分散到幾個具有專門功能的部件中,這些功能部件可以并行工作,使指令流出速度大大提高。
先行控制:現代計算機指令系統(tǒng)是復雜的,“分析”和“執(zhí)行”所需要的時間往往相差很大,從而造成功能部件的浪費,因此,需要采用先行控制技術。
分析指令和執(zhí)行指令時間不等時的一次重疊方式
采用先行緩沖棧是指令執(zhí)行過程的一種表示方法
先行控制:
一般采用先行緩沖棧的方式實現:
一般設置四種緩沖棧:
先行指令緩沖棧
當主存比較忙時,指令分析器能夠從先行指令緩沖棧中得到所需指令。
先行操作棧
對于條件轉移等使用。
先行讀書棧
主存儲器和運算器之間的緩沖存儲器,用來平緩運算器和主存儲器之間的工作。
后行寫數棧
當前沒有完全寫道主存的數據可以暫存到寫數棧
先行控制的處理機結構:
先行控制中的緩沖深度設計:
通過一種極端情況計算舉例:
假設先行指令緩沖棧已經完全充滿,緩沖深度是D1。
此時指令緩沖棧輸出端,指令流出速度最快,而輸入端,流入最慢
假設指令序列的最大長度是L1,平均分析一條指令的時間是t1
而此時更壞的是取指令很慢,平均取一條指令的時間是t2
假設先行控制棧充滿到被取空的過程中指令分析條數是L1
則此時有:L1t1 = (L1-D1)t2
1989年推出的i486處理器引入了五級流水線。這時,在CPU中不再僅運行一條指令,每一級流水線在同一時刻都運行著不同的指令。這個設計使得i486比同頻率的386處理器性能提升了不止一倍。五級流水線中的取指階段將指令從指令緩存中取出(i486中的指令緩存為8KB);第二級為譯碼階段,將取出的指令翻譯為具體的功能操作;第三級為轉址階段,用來將內存地址和偏移進行轉換;第四級為執(zhí)行階段,指令在該階段真正執(zhí)行運算;第五級為退出階段,運算的結果被寫回寄存器或者內存。由于處理器同時運行了多條指令,大大提升了程序運行的性能。
處理器一般由如下功能單元組成:
取指單元
譯碼單元
執(zhí)行單元
Load/store單元(load用于從內存中取數據,而STORE用于存儲數據到內存)
例外/中斷單元
電源管理單元
流水線通常由取指、譯碼、執(zhí)行及Load/Store等單元組成。各單元按圖所示的幾個步驟循環(huán)重復自身工作。
流水線的含義:
與工廠生產線類似,將一件工作分成若干個固定的工序進行。
cpu流水線技術是一種將指令分解為多步,并讓不同指令的各步操作重疊,從而實現幾條指令并行處理,以加速程序運行過程的技術。指令的每步有各自獨立的電路來處理,每完成一步,就進到下一步,而前一步則處理后續(xù)指令。(原理和生產流水線一樣)
CPU指令流水線
根據之前描述的基礎,指令進入流水線,通過流水線處理,從流水線出來的過程,對于我們程序員來說,是比較直觀的。
I486擁有五級流水線。分別是:取指(Fetch),譯碼(D1, main decode),轉址(D2, translate),執(zhí)行(EX, execute),寫回(WB)。某個指令可以在流水線的任何一級。
但是這樣的流水線有一個明顯的缺陷。對于下面的指令代碼,它們的功能是將兩個變量的內容進行交換。
1 2 3 |
XOR a, b XOR b, a XOR a, b |
從8086直到386處理器都沒有流水線。處理器一次只能執(zhí)行一條指令。在這樣的架構下,上面的代碼執(zhí)行并不會存在問題。
但是i486處理器是首個擁有流水線的x86處理器,它執(zhí)行上面的代碼會發(fā)生什么呢?當你一下去觀察很多指令在流水線中運行,你會覺得混亂,所以你需要回頭參考上面的圖。
1、第一步是第一條指令進入取指階段;
2、然后在第二步第一條指令進入譯碼階段,同時第二條指令進入取指階段;
3、第三步第一條指令進入轉址階段,第二條指令進入譯碼階段,第三條指令進入取指階段。
4、但是在第四步會出現問題,第一條指令會進入執(zhí)行階段,而其他指令卻不能繼續(xù)向前移動。
5、第二條xor指令需要第一條xor指令計算的結果a,但是直到第一條指令執(zhí)行完成才會寫回。
所以流水線的其他指令就會在當前流水級等待直到第一條指令的執(zhí)行和寫回階段完成。第二條指令會等待第一條指令完成才能進入流水線下一級,同樣第三條指令也要等待第二條指令完成。
這個現象被稱為流水線阻塞或者流水線氣泡。
常用概念:
1、流水線級數:流水線的節(jié)拍數。
2、吞吐率:單位時間內流水線能處理的任務數量。
3、最大吞吐率:流水線達到不間斷流水的穩(wěn)定狀態(tài)后可獲得的吞吐率。
4、加速比:流水方式的工作速度與等效的順序工作方式時間的比值。
流水線指標:
1、流水技術無助于減少單個任務的處理延遲(latency),但有助于提高整體工作負載的吞吐率
2、多個不同任務同時操作, 使用不同資源
3、潛在加速比= 流水線級數
4、流水線的速率受限于最慢的流水段
5、流水段的執(zhí)行時間如果不均衡,那么加速比就會降低
6、開始填充流水線的時間和最后排放流水線的時間降低加速比
低功耗嵌入式領域的ARM7就是采用3級流水線結構。
超流水
超流水線技術是通過細化的流水,提高主頻。使得機器在一個周期內完成一個甚至多個操作,其實質是用空間換取時間。
超流水處理器是相對于基準處理器而言的,一般cpu的流水線是基本的指令預取,譯碼,執(zhí)行和寫回結果四級。超流水線(superpiplined)是指某型CPU內部的流水線超過通常的5~6步以上,例如Pentium pro的流水線就長達14步。將流水線設計的步(級)數越多,其完成一條指令的速度越快,因此才能適應工作主頻更高的CPU。這一點我們可以用日常事例來說明,比如有5個人接力傳送木頭(對應一個5級的流水線),超流水是說細化該流水過程,即由10個人接力(此時為10級流水),顯然完成全部任務的速度會快。相當于毛主席的一句話:人多力量大(效率高)。
超標量
超標量是指在CPU中有一條以上的流水線,并且每時鐘周期內可以完成一條以上的指令,這種設計就叫超標量技術。其實質是以空間換取時間。
CPU架構是指在一顆處理器內核中實行了指令級并行的一類并行運算。這種技術能夠在相同的CPU主頻下實現更高的CPU吞吐率(throughput)。
4、指令與指令集
通過上面描述流水線,我們知道指令,是具體每一次處理器運行要干的事情。這里不可回避的一個問題就是“指令集”。
不同指令集的處理器,其主頻相同的情況下,會有很大的差異。
這個也就是很多朋友經常會問到的一個問題:相同的主頻,為什么ARM的性能會比X86差很多。
CISC是復雜指令集CPU,指令較多,因此使得CPU電路設計復雜,功耗大,但是對應編譯器的設計簡單。
RISC的精簡指令集CPU,指令較少,功耗比較小,但編譯器設計很復雜,它的關鍵在于流水線操作能在一個時鐘周期完成多條指令。
同樣的打拳,同樣出拳速度都很快,馬保國和泰森還是有很大差別的。
由于定位的不同,ARM處理器基于精簡指令集(RISC)架構。指令集數量少就可以簡化硬件邏輯的設計,減少晶體管數量,也就意味著低功耗。而且由于移動平臺應用通常簡單,程序的控制流不復雜,執(zhí)行效率沒有必要很高,所以流水線、分支預測等硬件邏輯都比較簡單。這些都降低了晶體管總量。同時因為移動設備有電池的能源限制,ARM的電源管理是作為重要部分特別設計了的。比如移動設備的處理器在待機時通常只以極低的主頻在運行,甚至可以暫時關閉閑置的核心、協(xié)處理器來降低功耗。
x86就截然不同。x86是復雜指令集(CISC)架構,存在很多機器指令,只為了高效地完成一項專門任務(比如MMX, SSE中的指令)。這就使得硬件的邏輯很復雜,晶體管數量龐大。為了高效地進行運算,x86架構有較長的流水線以達到指令級并行(ILP)。長流水線帶來的一個弊端,就是當遇到分支時,如果預載入分支指令不是未來真實的分支,那么要清空整個流水,代價較高。所以x86為此還必須有復雜的分支預測機構,確保流水線的效率。再加上多級cache,支持超線程、虛擬化等等,x86的復雜度其實相當高。
對于ARM來說,能夠直接調用的指令集相對少很多。每一個指令,都相當于我們開發(fā)FPGA時,固化下來的固定算法、固定電路。那么指令種類越多,則需要的邏輯資源也就越多。固化成處理器,其硅片面積就會大很多。
對于復雜指令集,本質是用硅片的面積換取計算的性能。而對于精簡指令集,對于其自身沒有的指令,需要用多次運行原本有的指令實現,相當于用多次計算來實現,犧牲了性能。但是ARM和X86的差異還有很多點,這里就是把最關鍵的點簡化給大家講清楚最基本的差別。
但是RISC指令集的處理器之間也是有很大差異的:MIPS、PowerPC、RISC-V、ARM之間還是有很多不同點。所以雖然他們相同主頻和近似的指令集。但是具體的性能并不能只看以上四個指標。
5、MIPS、DMIPS
MIPS:million instruction per second,表示每秒多少百萬條指令,如 10MIPS ,表示每秒一千萬條指令。
MIPS/MHz :表示 CPU 在每 1MHz 的運行速度下可以執(zhí)行多少個MIPS ,如 10MIPS/MHz,表示如果 CPU 運行在 1MHz 的頻率下,每秒可執(zhí)行一千萬條指令,如果 CPU 運行在 5MHz 的頻率下,每秒可執(zhí)行五千萬條指令。
DMIPS:Dhrystone MIPS,并非字面上每秒百萬條指令的意思。它是CPU運行一個叫Dhrystone(整數運算)的測試程序時表現出來的相對性能高低的一個單位(很多場合人們也習慣用MIPS作為這個性能指標的單位)。
Dhrystone:是于1984年由Reinhold P. Weicker設計的一套綜合的基準程序,該程序用來測試CPU(整數)計算性能。其名“Dhrystone”是與另一算法“Whetsone”區(qū)分而設計的名字。與Whetsone不同,Dhrystone并不包括浮點運算,其輸出結果為每秒鐘運行Dhrystone的次數,即每秒鐘迭代主循環(huán)的次數。
Dhrystone的重要性在于其能作為處理器整數計算性能的指標。很多現代的編譯器應用了靜態(tài)代碼分析技術,會將對輸出沒有影響的代碼忽略,這會使很多基準測試代碼不能正常運行,包括早些版本的Dhrystone。之后Weicker于1988年開發(fā)出了2.0版本,并于同年五月開發(fā)出了2.1版本,基本解決了這一問題。
Dhrystone所代表的處理器分數比MIPS(million instructions per second 每秒鐘執(zhí)行的指令數)更有意義,因為在不同的指令系統(tǒng)中,比如RISC(Reduced Instruction Set Computer精簡指令集計算機)系統(tǒng)和CISC(Complex Instruction Set Computer復雜指令集計算機)系統(tǒng),Dhrystone的得分更能表現其真正性能。由于在一個高級任務中,RISC可能需要更多的指令,但是其執(zhí)行的時間可能會比在CISC中的一條指令還要快。由于Dhrystone僅將每秒鐘程序執(zhí)行次數作為指標,所以可以讓不同的機器用其自身的方式去完成任務。另一項基于Dhrystone的分數為DMIPS(DhrystoneMIPS),其含義為每秒鐘執(zhí)行Dhrystone的次數除以1757(這一數值來自于VAX 11/780機器,此機器在名義上為1MIPS機器,它每秒運行Dhrystone次數為1757次)。
作為一項基準程序Dhrystone具有以下缺陷:
它的代碼與具有代表性的實際程序代碼并不相同。
它易受編譯器影響。舉例來說,在Dhrystone中有大量的字符串復制語句,用來測量字符串復制的性能。然而Dhrystone中字符串的長度不變,并且均開始于自然對齊的邊界,這兩點便與真實的程序不同。因此一個優(yōu)化性能好的編譯器能夠在去掉循環(huán)的情形下通過一連串字符的移動代替對字符串的復制,這將會快很多,可能會高達30%。所以我們在編譯測試程序的時候,如果指定編譯器的優(yōu)化等級的話,我們會發(fā)現在不同的優(yōu)化等級下,表現出來的性能指標會有差別,優(yōu)化等級越高,性能指標越好,以下是一款芯片在不同的優(yōu)化等級下的指標參數
Dhrystone代碼量過小,在現代CPU中,它能夠被放進指令緩存中,所以它并不能嚴格的測量取指性能。
DMIPS/MHz:表示 CPU 在每 1MHz 的運行速度下可以執(zhí)行多少個DMIPS,由于DMIPS與CPU頻率具有正相關性,所以這一分數更容易比較不同的CPU在不同的時鐘頻率下運行Dhrystone的結果。
從上面的幾個概念來看,都是為了評估cpu的性能—cpu的計算速度,由此引申開來,在軟件行業(yè),都需要一個基準測試程序,來評估某種性能----比如CPU的運算效率或者內存效率,我們稱之為benchmark。比如在評估cpu運算速度領域,就有上面提到的dhrystone,coremark,whetstone等等;在評估內存效率上,有mem_test等等;評估web功能的有Apache Benchmark,Redis-Beachmark等等
dhrystone軟件如何測試性能呢?
我們可以從網上搜到到dhrystone軟件的source code。
其實也就是三個文件,分別是dhry.h、dhry_1.c、dhry_2.c。如果是在linux環(huán)境下開發(fā)的話,我們需要配置好makefile,然后編譯并生成可執(zhí)行程序,運行即可;如果在其他平臺上,比如在ARM Cortex-M上開發(fā)的話,有些集成的IDE會自帶這些功能。
根據以上介紹的基本概念以及知識,那么MIPS和DMIPS有什么區(qū)別呢?CPU性能的評估主要有兩個方面:
每秒鐘能夠執(zhí)行的指令集數量
顯然MIPS反映的就是這方面的能力,這個能力由cpu的架構,內存memory的訪問速度等硬件特性來決定
每秒鐘能夠實現的工作數量
DMIPS反映的就是這樣的能力,這個能力除了包含第一部分的特性之外,還包括了這些指令集在實現我的測試程序的時候,是如何高效實現的呢?
舉例來說,一個PIC16xxx的cpu,運行在20MHz主頻,MIPS=5;但是這些指令只能處理8bit數據,并且不能處理除法和乘法運算,另外一個是一個8088的cpu,主頻是5MHz,因此我們可以說PIC16xx在某些方面的性能比8088更快(比如在只有加減法運算的場合),在另外一些場合,8088的運算速度會比PIC16xx的更快,所以僅僅看MIPS的值,并不能夠有效的反映的一款cpu性能
這里我們發(fā)現處理器性能評估的時候,只看MIPS和DMIPS有以下局限性:
a、相同MIPS的前提下,指令集,指令的種類和復雜度,影響實際性能。MIPS只能說明出拳速度,雖然你會閃電五連鞭,但是出拳的技巧,力量等各個維度的數值,才決定你是不是很強大。
b、DMIPS是讓處理器做一件非常簡單的事情,來反映處理器的性能。第一,處理器并不是只做這么簡單的事情;DMIPS處理的是整數,當處理浮點數的時候性能需求與處理整數的時候性能表現有比較大的差異。
c、處理器的位寬沒有參與評估。
6、SPEC
SPEC指標體系由Standard Performance Evaluation Corp.制定,目前主要包括針對CPU性能的SPEC CPU2000(已有CPU2006,但尚無數據)、針對Web服務器的SPECweb2005、針對高性能計算的SPEC HPC2002與SPEC MPI2006、針對Java應用的jAppServer2004與JBB2005以及對圖形系統(tǒng)、網絡和郵件服務器的測試指標。
?
縮略語 | 英文全名 | 中文解釋 |
SPEC | Standard Performance Evaluation Corparation | 標準性能評估組織 |
Speed | Speed | SPEC CPU2000的一種測試方法,針對單一任務考察運行時間 |
Rate | Rate | SPEC CPU2000的一種測試方法,針對固定時間考察完成任務量 |
Base | Base | 只為所有的場景提供一種優(yōu)化 |
Peak | Peak | 為一個單獨的場景提供所有的優(yōu)化 |
?
其中CPU2000和web2005兩類是被引用最廣泛的指標。
CPU2000 注重CPU
SPEC CPU2000 是一組針對 CPU 和內存的測試,它主要測試的對象是 CPU、內存,不測試硬盤、I/O 效率和網絡等部分。SPEC CPU2000 由許多源代碼程序組成,這些程序都從實際的應用(主要來自配置1~4顆CPU的工作站應用)中取出來的,例如 164.gzip 就是gzip 壓縮程序。這些程序區(qū)分成“整數”和“浮點數”兩組。SPECint2000 就是“整數”部分,而 SPECfp2000 則是“浮點數”部分?!罢麛怠辈糠钟?12 個程序,使用 C 或 C++ 語言,它們不使用CPU的浮點單元;而“浮點數”部分有 14 個程序,使用 FORTRAN 77/90 和C語言,這些程序的主要運算是浮點數的。
SPECint2000 和 SPECfp2000 的結果,以執(zhí)行時間為準。每個程序的執(zhí)行時間和一個參考平臺(Sun Ultra5/10 300MHz)相比,計算出其倍數。如果執(zhí)行時間和參考平臺相同,結果就是100。如果只花了一半時間完成,結果就是200?!罢麛怠钡?2 個程序的結果,取其平均值,得到的就是SPECint2000 的測試結果。“浮點數”的 14 個程序也是一樣。
由于SPEC CPU2000的測試程序都是源代碼形式(以保證跨平臺測試),所以編譯器效率就顯得十分重要。SPEC CPU2000規(guī)定,測試結果有“Base”和“Peak”兩種結果?!癇ase”測試中,對于編譯時的最佳優(yōu)化參數有所規(guī)定(所有的程序都需使用同樣的參數,且參數數目不能超過四個),而“Peak”測試則比較寬松。
另外,因為 SPEC CPU2000的程序都是針對單CPU的系統(tǒng)設計,因此,在多CPU系統(tǒng)上,如果要測試多CPU系統(tǒng)的效率,則是采取同時執(zhí)行多個相同程序的方法,這個結果就是“Rate”。因此,同樣有 SPECint_rate 和 SPECfp_rate 的測試結果。需要說明的是,“Rate”測試同時執(zhí)行多個相同的程序,但程序之間并不會有關聯,所以這是一種理論計算能力測試,并不代表實際并行計算能力。
SPEC測試需要注意的還有以下幾點:
①SPEC CPU2006測試所得到的數據不能和CPU2000進行直接對比,因為它們是基于不同的算法結構。
②其次SPEC測試時,CPU基本是100%跑的,所以基本不能進行其他復雜的數據操作或者編譯操作。
③測試過程時間較長,中間是不允許中斷的,除非kill掉和SPEC相關的所有進行,results中的debug文件也只會保留kill進程之前的最后一個測試完成的場景結果。
如果發(fā)現最終的SPEC值過低,可以從以下幾點中查找結果:
①編譯器是否正確,是否符合進行測試的處理器。
②其次是指令集是否為此CPU的最佳指令集。
③內存的配置是否符合要求。
④處理器的實際工作頻率是否達到它應有的頻率。
⑤溫度等外在的環(huán)境因素是否導致處理器降頻使用。
如果單板不是用作服務器應用,一般的嵌入式應用,通常用MIPS作為指標進行評估。這里說的MIPS不是處理器架構,是其原本的含義。MIPS(Million Instructions Per Second):單字長定點指令平均執(zhí)行速度 Million Instructions Per Second的縮寫,每秒處理的百萬級的機器語言指令數,這是衡量CPU速度的一個指標。像是一個Intel80386 電腦可以每秒處理3百萬到5百萬機器語言指令,即我們可以說80386是3到5MIPS的CPU。處理器架構相同的情況下,MIPS能夠比較出處理器之間的性能關系,不同的處理器之間因為指令的功能、數量、效率并不相同,MIPS值僅做對比參考。不同版本的測試軟件也會測試出不同的結論,所以對比兩款處理器時應該選擇相同版本的測試軟件。
準確測試cpu的mips或者mflops一般是設計體系結構時候用cpu模擬器或者verilog前仿真得到的。對于用C語言比較準確的測試mips或者mflops,你可以用一個程序讀取系統(tǒng)時間,然后執(zhí)行第二個程序,第二個程序執(zhí)行完成后再記錄執(zhí)行的時間,然后反匯編第二個程序,統(tǒng)計第二個程序中執(zhí)行的指令條數,通常第二個程序中執(zhí)行的指令數是確定的,(分支和循環(huán)的次數是可確定的)。mips和mflops在RISC CPU的評價中比較有價值。
處理器的主頻提高與業(yè)務能力不是線性的,同樣其測試結果也不代表其業(yè)務能力。有些處理器的實際性能用簡單的評價標準并不能說明其業(yè)務能力,需要直接測試其業(yè)務能力。直接在demo板上移植業(yè)務軟件,評估其業(yè)務能力是最可信賴的一種方式。例如選擇多核DSP替代原有的單核DSP電路板時,直接測試多核DSP的G.711轉碼性能,與原先的單核DSP進行對比,可以得出具體的業(yè)務能力。然后根據其業(yè)務需求,評估需要在一塊單板上安排多少數量。當然還需要評估成本、功耗、散熱等維度的挑戰(zhàn)。
7、魯大師之類的軟件對PC、手機的評分
類似魯大師之類的軟件,用自己的評分權重把處理器整點數、浮點數、多核運行、內存讀寫、3D特性的性能做了測試,然后按照自己的權重標準,給一個綜合打分。
盡管 CPU 性能指標評測?很重要,但每個組件在系統(tǒng)性能中都能發(fā)揮作用。
CPU。具有復雜人工智能、物理和顯卡后處理功能的游戲往往傾向于 CPU 密集型,并且可能會從具有更高內核/線程數和更高時鐘速度的 CPU 中獲益更多。
GPU。在評估系統(tǒng)的游戲性能時,除了 CPU 性能指標評測外,還要檢查 GPU 性能指標評測,因為某些游戲更依賴于 GPU。例如,獨立顯卡可以處理 3D 渲染的大部分工作。
內存和存儲。這些組件會影響系統(tǒng)的響應能力和加載時間。
軟件。無論您的系統(tǒng)配置如何,性能都會因游戲不同而有所變化。這都會發(fā)生。這與游戲的編程方式有關。您正在玩的顯卡設置和分辨率也會影響性能。
由于很多用魯大師這樣軟件測試計算機性能的朋友,主要用PC來打游戲,所以游戲運行過程中的關鍵指標作為評估的主要依據,而像SPEC這樣主要按照服務器應用來評估處理器以及周邊硬件的性能。
同樣手機跑分跟PC跑分是一個原理。
基準測試程序(Benchmark)用來測量機器的硬件最高實際運行性能,以及軟件優(yōu)化的性能提升效果,可分為微基準測試程序(Microbenchmark)和宏基準測試程序(Macrobenchmark)。
基準測試程序(Benchmark)用來測量機器的硬件最高實際運行性能,以及軟件優(yōu)化的性能提升效果,可分為微基準測試程序(Microbenchmark)和宏基準測試程序(Macrobenchmark)。微基準測試程序用來測量一個計算機系統(tǒng)的某一特定方面,如CPU定點/浮點性能、存儲器速度、I/O速度、網絡速度或系統(tǒng)軟件性能(如同步性能);宏基準測試程序用來測量一個計算機系統(tǒng)的總體性能或優(yōu)化方法的通用性,可選取不同應用,如Web服務程序、數據處理程序以及科學與工程計算程序。
為了達到上述目標,基準測試程序需要滿足如下條件:首先?;鶞蕼y試程序包含最常見的計算、通信和訪存模式,能夠為實際的應用程序預測不同高性能計算系統(tǒng)性能排名;其次,能指導高性能計算系統(tǒng)和應用的改進,亦即在基準測試程序上有效的優(yōu)化方法能移植到實際應用中。
編輯:黃飛
?
評論
查看更多