簡體   English   中英

如何測試計算機每秒可以執行的指令數量?

[英]How can you test how many instructions per second your computer can do?

有沒有快速/簡單的方法來做到這一點(至少粗略估計)?

我是基准測試算法,我認為知道我的計算機執行指令的絕對速度並將其與我的漸近分析進行比較會很酷。

如果您想知道您的CPU 可以做什么 ,請查看文檔。 您的CPU供應商指定所有指令的延遲和吞吐量,以及各種其他信息(每個周期可以發出或退出的指令數,緩存延遲等等)。 基於此,您可以計算理論峰值吞吐量。

如果您想要執行CPU 實際執行的操作,請運行自己的代碼並測量其性能。

但是,請記住,現代CPU確實是復雜的動物,它們的性能取決於各種各樣的因素,並且你很少能夠接近最大化你的CPU,並理解為什么 ,或者究竟是什么讓你的代碼返回需要對硬件有一個相當透徹的理解。 (我通常的經驗法則是,如果你獲得理論峰值FLOPS的持續30-40%,你會做得非常好)

這是一個典型的案例“理論上,理論和實踐是相同的,在實踐中它們不是”。

現代CPU具有非常復雜的邏輯,這意味着所執行的ACTUAL操作數量與您從查看代碼或思考問題時的想法不同[除非您的大腦與小行星的大小相同並且知道特定的CPU如何工作]。 例如,處理器可以推測性地在分支的一側或另一側執行指令,即使它沒有完全到達分支 - 如果這是“錯誤”的一方,那么它將丟棄那些指令的結果 - 但是當然,執行它們需要時間。

指令也不按順序執行,這意味着很難准確預測何時執行哪條指令。 有一些例外。

如果您同時通過所有可用的執行單元推送數據和指令,您將只獲得(接近)理論吞吐量 - 這意味着具有正確的指令組合,當然還有緩存中的所有代碼和數據。

因此,從理論上講,我們可以通過編寫非常聰明的代碼,使處理器充滿指令,從而最大化它。 在實踐中,這非常非常迅速地變成了一項艱巨的任務。

然而,問題在於測量指令的吞吐量,而在現代CPU上,使用正確的額外軟件可以實現這一點。 在linux perftool或oprofile上,對於Windows,有英特爾的VTune和AMD的代碼分析師。 這些將允許您(具有足夠的權限)獲取處理器中的“性能計數器”,其具有“指令數”,“浮動操作數”,“緩存未命中數”,“分支錯誤預測”的計數器和許多其他測量處理器性能的測量。 因此,給定足夠長的運行時間(至少幾秒鍾,最好是更多),您可以測量處理器執行的實際計數或時鍾周期。

在實踐中,有效的指令數主要取決於內存延遲,這是性能的主要瓶頸。 等待數據很糟糕。 處理器可以通過緩存,流水線操作和並發等技術稍微緩解這個問題,但問題仍然存在並且只會隨着時間的推移而變得更糟。

正確的實施可以產生巨大的差異。 您可能想要查看有關緩存友好代碼的問題

現代CPU正在流水線化指令處理,所以沒有這樣的常量。

但是,您可以在算法開始時和結束時讀出CPU滴答數。 我認為這與您測量的水平一樣低。

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

注意:有很多問題為什么這不是100%准確,我可以提到很少,但我相信社區將能夠添加到列表中:-OS預先處理您的進程 - 緩存未命中(算法)將在第一次運行得更慢,如果它隨后運行得更快) - 在較舊的CPU中,CPU滴答對CPU頻率不是不變的

您可以在Linux中使用Perf工具。 它很容易使用。

要獲得有關CPU周期,每個周期的指令(IPC),緩存命中/未命中等的統計信息,只需使用Perf運行程序即可。 示例命令是

perf stat -d <exename>

有關更多信息,請訪問http://www.brendangregg.com/perf.htmlhttps://perf.wiki.kernel.org/index.php/Tutorial

暫無
暫無

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

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