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