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;
它是正確的嗎?平均數,標準偏差等呢?
謝謝!有關代碼的其他建議?我可以改進什麼,在這裏改變,等等? – nullpointer
@nullpointer:我會彈出一個關卡,詢問你的總體目的是什麼?如果找到最快的算法有什麼關係,我會不太關心測量。我會更關注如何更快地製作節目。如果這是目標,那麼[*可能會發現此幫助*](http://stackoverflow.com/a/1779343/23771)。你會驚訝多少脂肪可以從理想的最佳方案中削減。 –
再次感謝你。我會閱讀這個主題,但我的目的不是找到最快的算法,而是要衡量它的性能,就是這樣。我知道單個測試(一個函數調用)在基準測試中沒有意義。我只是想知道如果我這樣做是正確的,如果我能得到我的測量'可用'的結果。 – nullpointer