2011年6月22日 星期三

Dhrystone亂談: 彎曲評論

Dhrystone亂談: 彎曲評論

Dhrystone亂談
作者1help1 | 2010-02-25 06:34 |類型彎曲推薦 , 芯片技術 | 11條用戶評論»

某日,在論壇上見兩個網友掐架. A男是藕粉,B男是藕黑.在芙蓉姐姐是否漂亮的問題上爭執不下.然後網友C感慨,要是能有一個benchmark來測試人是否漂亮就好了,再也不用爭執誰漂亮誰醜了. 用benchmark一測,得到一個分數,再來一個全國排名,直接印在身份證上. 這下,整個世界清靜了.

聽完故事,再來看一個廣告. 這個是某公司用來忽悠客戶的某個CPU IP的參數.


請注意用紅線劃出來的部分,顯示performance 是2.50 DMIPS/MHz. 如果你是被忽悠的客戶,你該如何來看待這個指標呢?

說DMIPS之前,先說一下在業界比較有名的但是口碑不太好的Dhrystone benchmark.這是誕生在上個世紀​​80年代的一個用來測試CPU性能的測試用例.把這個benchmark在CPU上一跑,然後看看每秒能跑多少次這個程序,然後除以1757,從來計算出DMIPS的值.為啥要除以1757呢?因為這個是拿VAX 11/780來做參考的.VAX 11/780每秒能執行1757次的Dhrystone benchmark. 那麼來看上面的廣告中的2.50 DMIPS/MHz.這個說明Cortex-A9這個IP每秒能跑1757×2.50xFreq=4392.5xfreq 次的Dhrystone程序. 如果Freq為650Mhz的話,那麼沒秒能跑的Dhrystone程序的次數為4392.5×650=2855125.

聽上去不錯阿,通過一個benchmrak就能知道不同的CPU之間的性能了.只需要在不同的CPU上都跑這個benchmark,然後比較DMIPS/MHz不就行了嗎? 為什麼說Dhrystone的口碑不太好呢? 原因就是奸商們濫用了Dhrystone.

上面我們說在CPU上跑Dhrystone其實不太準確,準確的說法是在一個系統上跑Dhrystone.這個系統包括硬件如CPU,還包括軟件如OS/Library/compiler. 因此Dhrystone反映的是系統的性能還不單單是CPU的性能. 同時,奸商們為了去忽悠客戶,搞應試教育來提高Dhrystone的分數,從來讓Dhrystone變得不太那麼客觀. 通常奸商們使用的方法包括使用特定優化的library.由於在執行Dhrystone 程序的時候,有一些library的函數調用.比如strcpy/strcmp這一類使用比較頻繁的函數,如果能有一個優化版本,那麼Dhrystone 程序跑起來一定更快. 就像一個富二代和窮二代,輸在了起點上,不服氣不行阿. 另外,採用優化的編譯器也是另外一個方法. 編譯器針對Dhrystone做特定的優化,這就相當於考試的時候發現監考的是你家親戚,爽大了.

另外,由於微結構的關係,OS/compiler都會影響到最後的benchmark 得分. 下面來分析一個具體的案例. 在分析案例之前,先給大家出個問題. 現代的CPU的流水線越來越長,那麼長的pipeline的好處和缺點是什麼? 答不上來的同學複習複習量化. 這個問題也是做CPU相關的公司面試經典問題.

通常來說,長的流水線可以把CPU的工作切的更細,這樣每一個階段所需要的時間會很少,那麼一個cycle所需要的時間變小,這樣就可以提高系統的頻率.這個和生產車間細分工種有異曲同工之妙.那麼帶來的問題是什麼呢? CPU和生產車間流水線不同. CPU的執行不是完全順序的(如果是的話,那該多好阿).在程序中會有各種各樣的打亂CPU執行順序的事情.比如跳轉指令. 流水線不喜歡這些指令,因為這會使得已經進入流水線並且已經做了一些事情的指令被flush掉,等於這些工作白做了. 因此長的流水線所帶來的問題就是流水線stall帶來的代價變大.

那好,了解了流水線的優缺點,下面來說一個案例. 某一款CPU具有18級的流水線,但是其benchmark/MHz的分數反而不如前一代的8級流水線的CPU. 這是為什麼呢? 可能的原因大概有這樣幾個.

(1)如果CPU的branch prediction預測失敗次數比較多,那麼長的流水線帶來的代價更大
(2)如果benchmark中跳轉指令是寄存器跳轉(也就是跳轉的目標在寄存器中),那麼由於這種情況CPU不能對跳轉目標做predict,就回浪費流水線.長的流水線帶來的浪費更大.
(3) TLB缺失的exceptin太多.長的流水線帶來的浪費更大.
(4 ) benchmark中數據依賴太多
(5)其他原因(請讀者自己補充)

正是由於這一系列的綜合因素,導致了太多的流水線stall. 而長流水線對stall比短流水線敏感,導致了benchmark分數/MHz反而不如短的流水線. 當然了由於長流水線能帶來更高的頻率,因此頻率和benchmark/MHz的乘積還是會顯著提高的.

那麼即使公平競爭,單純Dhrystone用來衡量CPU性能的好壞也是不太恰當的.問題在於Dhrystone benchmark太小,因此能衡量的東西就太少.吃西瓜吃得快的(如豬八戒)並一定跑步就跑得快.為了克服Dhrystone的缺點,EEMBC這個機構推出了一系列的benchmark.當然這些都是要收費的.另外,EEMBC還”發揚雷鋒精神”,提供了一個免費的類似於Dhrystone的benchmark,稱為CoreMark.其FAQ值得一讀.

上述是對Dhrystone以及流水線的一些亂談的,本文中一定會有一些錯誤,歡迎大家指出和評論.

沒有留言:

張貼留言