2011-06-17 64 views
10

我正在優化軟件,並希望測量性能。所以我目前正在用OVP(開放式虛擬平臺)模擬一個ARM平臺,並將統計數據作爲模擬時間和模擬指令。如何測量ARM性能?

我的問題是,爲什麼每次運行軟件時都有不同的模擬指令(不同但接近)?每次都不一樣嗎?是不是這樣,我用C編寫的軟件將被編譯爲ARM彙編程序指令,並且每次運行軟件時,模擬指令將是這些ARM彙編程序指令運行多少次?每次都應該是一樣的?

我應該如何測量性能?取10個模擬指令樣本並獲得平均值?

+0

某些系統可能會在每次運行的測量設備的一個時鐘週期內出現,對於某些系統而言,有些系統不會允許這種情況發生。無論如何,這可能與你在做什麼有關。你正在運行嵌入式操作系統嗎?你在與外圍設備,網絡等通話時使用哪種軟件? – 2011-06-17 13:43:32

+3

指令的數量可能會因您正在做的事情而有所不同,比如說您有20個指令輪詢某些事件或外設來完成某些事情。如果從一次運行到下一次運行,你只是錯過了一個事件,並且必須再次運行該循環,則有20個指令差異。這種情況在每次模擬中都會發生幾次或幾次,這可能會增加明顯的差異。如果您將代碼和測試定製爲永遠不能依賴外部事件的東西,並且設計將執行相同的路徑,那麼每次都應該是相同的。 – 2011-06-17 13:46:40

+0

你想要衡量什麼樣的表現? CPU,內存,IO,網絡?如果我們在談論cpu,bogomips可能值得一試/看。 – PhilW 2011-07-26 08:46:49

回答

4

從我在一個真正的(非模擬)ARM的經驗,如果我走循環計數代碼循環的數量會有所不同的部分,這是因爲:

  • 可以有上下文切換在執行代碼的中間。
  • 輸入代碼段時,CPU的初始狀態可能會有所不同。 (例如流水線的內容,分支預測等)
  • 在進入代碼部分時,高速緩存狀態將不同。
  • 外部因素,如其他硬件訪問外部存儲器。

由於所有這些因素,對於真實硬件和真正的操作系統來說,採取平均值(加上其他一些統計測量)確實是唯一實用的方法。在一個好的模擬器中,這些因素中的一些或可能被消除。

在某些實際芯片上(或者如果仿真器支持),ARM Performance Monitoring Unit可能會有用。

如果你正在編寫Cortex A8 this是一個很酷的在線循環計數器,它可以真正幫助你從你的代碼中獲得更多的性能。