2013-07-25 38 views
4

正如我在我以前的主題中寫的:Benchmarking code - am I doing it right?我需要找到一種方法來獲得基準統計數據,如平均數,平均數,標準差等。我如何使用我發佈的這些方法來做到這一點?請注意,我使用解決方案以時間間隔對代碼進行基準測試,而不是多次調用函數。有任何想法嗎?代碼基準統計 -

我想出了只有一個,不知道如果它的正確的(僞):

buffsize = 1024; 
buffer [buffsize]; 
totalcycles = 0 

// arrays 
walltimeresults = [] 
cputimeresults = [] 

// benchmarking 
for i in (0, iterations): 
    start = walltime(); 
    fun2measure(args, buffer); 
    end = walltime(); 
    walltimeresults[i] = end - start; 

    start = cputime(); 
    fun2measure(args, buffer); 
    end = cputime(); 
    cputimeresults[i] = end - start; 

    c1 = cyclecount(); 
    fun2measure(args, buffer); 
    c2 = cyclecount(); 

    cyclesperbyte = c2-c1/(buffsize); 
    totalcycles += cyclesperbyte; 

for i in range (0, iterations) : sum += walltimeresults[i]; 
avg_wall_time = sum/iterations; 

sum = 0; 

for i in range (0, iterations) : sum += cputimeresults[i]; 
avg_cpu_time = sum/iterations; 

avg_cycles = totalcycles/iterations; 

它是正確的嗎?平均數,標準偏差等呢?

回答

2

你的平均看起來不錯。

平均數(即平均)是

mean = 1/N * sum(x[i]) 

標準偏差是平方根方差:

sigma = sqrt(1/N * sum((x[i]-mean)^2) 
+0

謝謝!有關代碼的其他建議?我可以改進什麼,在這裏改變,等等? – nullpointer

+1

@nullpointer:我會彈出一個關卡,詢問你的總體目的是什麼?如果找到最快的算法有什麼關係,我會不太關心測量。我會更關注如何更快地製作節目。如果這是目標,那麼[*可能會發現此幫助*](http://stackoverflow.com/a/1779343/23771)。你會驚訝多少脂肪可以從理想的最佳方案中削減。 –

+0

再次感謝你。我會閱讀這個主題,但我的目的不是找到最快的算法,而是要衡量它的性能,就是這樣。我知道單個測試(一個函數調用)在基準測試中沒有意義。我只是想知道如果我這樣做是正確的,如果我能得到我的測量'可用'的結果。 – nullpointer