2012-09-30 178 views
7

如何計算我的應用程序的FLOPS? 如果我有執行指令的總數,我可以將它除以執行時間。但是,如何計算執行指令的數量?計算FLOPS(浮點運算每秒)

我的問題是一般的,任何語言的答案是高度讚賞。但我期待爲我的應用程序找到一個解決方案,它是由C/C++和CUDA開發的。

我不知道標籤是否合適,如果我錯了,請糾正我。

+0

可能的重複[如何計算內核的Gflops](http://stackoverflow.com/questions/7875607/how-to-calculate-gflops-of-a-kernel) – talonmies

+0

我意識到這個問題!我的問題是一般的。如何計算FLOPS?即使是多核心。答案也可能幫助我的案例「CUDA」。 – ahmad

+3

我發佈瞭如何使用NVIDIA工具來收集[計算實現的帶寬和FLOPS ...]中的FLOP(http://stackoverflow.com/questions/12539300/calculating-achieved-bandwidth-and-flops-gflops-and -evaluate-CUDA內核-perfor)。對於x86,有幾個用於計算FLOP的Linux庫。 x86性能監視器支持計數FLOP,但您必須閱讀手冊以瞭解具體細節(推測性指令,計數內容......) –

回答

7

如果浮點運算的數量不容易建模,我該怎麼做是爲了產生兩個可執行文件:一個是生產版本,給了我執行時間,另一個在執行時對所有浮點運算進行計數(當然這會很慢,但這對我們的目的無關緊要)。然後我可以通過將第二個可執行文件中的浮點操作數除以第一個可執行文件的時間來計算FLOP/s值。

這可能甚至可能是自動的,但到目前爲止我還沒有這方面的需要。

6

您應該用數學方法模擬您的數據完成了什麼。隔離一個循環迭代。然後計算所有簡單的浮點加法,乘法,除法等。例如, y = x * 2 * (y + z*w)是4個浮點運算。將結果數乘以迭代次數。結果將是您正在搜索的指令數量。

+0

適用於相干控制流和確定性分支。它不適用於具有輸入相關條件分支的代碼(動態運行時間決定執行多少個FP)。 – ahmad

+0

你是否忽略條件語句if(i MySchizoBuddy