我正在爲Windows移動設備上的代碼性能做一些基準測試,並注意到一些算法在某些主機上的性能明顯更好,其他。當然,考慮到時鐘速度的差異。針對ARM進行優化:爲什麼不同的CPU對不同算法的影響有所不同(並且有很大的不同)
供參考的統計數據(所有結果從相同的二進制生成的,由Visual Studio 2005定位的ARMv4編譯):
英特爾XScale PXA270
- 算法的:22642毫秒
- 算法乙:29271毫秒
ARM1136EJ-S芯(嵌入在MSM7201A芯片)
- 算法的:24874毫秒
- 算法B:29504毫秒
ARM926EJ-S芯(嵌在OMAP 850芯片)
- 算法的:70215毫秒
- 算法B:31652 ms(!)
我簽出了浮點數作爲可能的c ause,雖然算法B確實使用浮點代碼,但它並沒有在內部循環中使用它,並且沒有一個核心似乎具有FPU。
所以我的問題是,什麼機制可能會導致這種差異,最好與如何修復/避免有問題的瓶頸建議。
在此先感謝。
聽起來像第三個處理器對我來說太慢了...... – RCIX 2009-10-06 10:09:27
我只是在猜測,但性能不佳可能是由chache碰撞引起的,具體取決於內存佈局。 – starblue 2009-10-06 10:27:58
只是速度較慢的處理器無法解釋爲什麼算法速度提高50%現在速度降低50%... 通過將內部陣列的尺寸從2048更改爲2048 + 12,我確實獲得了最差情況8秒的時間,以避免緩存關聯性問題(感謝提示,starblue),但它並不包含所有內容,因爲比率現在是62sec vs 31sec。 – Combuster 2009-10-06 11:58:16