簡體   English   中英

如何在 i7 上測量 java 性能?

[英]How to measure java performance on the i7?

我正在嘗試對現實生活中算法的兩種不同實現進行典型的“A/B 測試”,例如在兩種情況下使用相同的數據集。 該算法在執行方面是確定性的,所以我真的希望結果是可重復的。

在 Core 2 Duo 上也是如此。 僅使用 linux“時間”命令,我將獲得大約 0.1% 的執行時間變化(超過 10 次運行)。

在 i7 上,我會得到各種各樣的變化,而且我可以輕松地從平均值上下 30% 的變化。 我認為這是由於 i7 所做的各種 CPU 優化(動態超頻等),但這確實讓進行此類測試變得困難。 有沒有其他方法可以確定兩種算法中的哪一種是“最好的”,我可以使用任何其他合理的指標嗎?

編輯:該算法不會持續很長時間,這實際上是我試圖進行基准測試的現實場景。 所以重復運行並不是一個真正的選擇。

看看是否可以在 BIOS 中關閉動態超頻。 此外,在進行基准測試時放棄所有可能運行的其他進程。

好吧,您可以使用 O 表示法原理來確定算法的性能。 這將決定算法的理論速度。

http://en.wikipedia.org/wiki/Big_O_notation

如果您絕對必須知道算法的實際速度,那么您必須在系統上對其進行基准測試。 但是使用 O 表示法,您可以看到所有這些,並且只關注重要的因素/變量。

你沒有說明你是如何進行基准測試的。 如果您還沒有閱讀此內容,您可能想閱讀: 如何在 Java 中編寫正確的微基准測試?

如果您正在運行持續測試,我懷疑動態時鍾會導致您的變化。 它應該保持在最大渦輪速度。 如果您運行它的時間過長,它可能會降低一個熱量乘數。 盡管我對此表示懷疑,除非您超頻並且靠近熱包絡線。

超線程可能正在發揮作用。 您可以在 BIOS 中禁用它,看看它是否會對您的數字產生影響。

在 linux 上,您可以鎖定 CPU 速度以停止時鍾速度變化。 ;)

您需要使基准盡可能地切合實際。 例如,如果你完全運行一個算法並取一個平均值,你可能會因為每 10 毫秒執行一次相同的任務而得到非常不同的結果。 即我已經看到了 2 倍到 10 倍的變化(在平坦和相對較低的負載之間),即使在鎖定時鍾速度的情況下也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM