2015-11-04 64 views
0

我正在購買一臺新電腦。這很好,但我想知道它有多快。
現在我可以使用已經建立的基準 - 但我想知道爲什麼它更快。編寫小型基準測試

所以我的想法是:
1.編寫小的基準用-march =本地
3.配置文件來測試非常具體的東西
2.編譯兩次,比較

現在我只需要來了基準:
- 向量(或矩陣)操作來測試SIMD指令
- - 窮舉平方根來測試一般指令在GB範圍測試RAM速度
的memcpy(),memset的()&了memchr() SP eed和pipeline
- 簡單算術(x [i] ++或者其他)來測試緩存 - 用2,3和4個不同值的模式填充數組。
對於每個不同的值(使用if/else的一個測試,其中一個使用switch)做一些小事情。
這應該測試分支預測器。

我錯過了一項功能嗎?這些基準中的任何一個都可以簡化嗎?對於我認爲涵蓋的CPU功能是否還有其他更好的測試?

+1

現代CPU擁有數百個微架構「功能」,並針對ILP,mem/cache帶寬,預取,省電等進行了優化。每種CPU都具有常見或特殊情況下的特殊行爲。所以是的,你很可能錯過了一個功能。 – Leeor

回答

3

現在我只需要拿出基準:

「只是」 :-)。爲人們編寫比較計算機的基準實際上是一個有利可圖的行業。這是來自微不足道的FAR。即使是專業人員寫​​的基準是愚蠢的。對於商業供應商的一些例子,搜索SPEC,Geekbench,EEMBC ...他們花費很多錢。

即使這些由所謂的專家撰寫的基準測試結果,在作爲工程師進行溝通時(作爲營銷人員做得更好),給出明智的結果也常常是荒謬的。現代機器(我避免使用術語「CPU」,因爲這只是其中的一小部分,你有回憶,互連,磁盤,驅動程序,操作系統......)真的很難在微觀優化水平上推理就像你建議的那樣。用這些簡單的測試你可能會對你的兩臺計算機有一些直覺,但是這將遠沒有好的數據。

我可以推薦的最好方法是運行一個編譯器基準套件。 LLVM有一個test-suite項目,其中有各種基準可以運行,以瞭解您的新計算機有多好。我相信GCC會有類似的東西,我只是不熟悉它。運行測試套件的說明是here

即使那個測試套件比您能夠創建的測試套件大得多,也需要大量的統計信息。性能比較充滿驚喜,而且很容易弄錯。

現在,應答爲什麼計算機A比對這些特定基準乙更快(或更慢)的範圍可以從微不足道的是不可能的。微不足道的情況可能是更多寄存器或更多緩存(以及明智地使用緩存的程序),並且不可能對foobaddybar進行一些更改,製造商不會公佈詳細信息,並且您只能猜測。

所以,很抱歉,但是這些「明顯」的測試會告訴你很多有關現代機器的有趣事情,日子已經過去了。你需要運用非常嚴格的統計數據和基礎設施來獲得半合理的結果。