2013-07-25 2 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

평균은 괜찮아 보입니다.

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

감사 :

평균 (즉 평균)

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

표준 편차 분산의 제곱근

입니다! 코드에 대한 다른 조언? 무엇을 개선하고, 여기에서 변경할 수 있습니까? – nullpointer

+1

@nullpointer : 레벨을 올리고 전체적인 목적을 묻습니다. 가장 빠른 알고리즘을 찾는 것과 관련이 있다면, 나는 측정에 덜 관심이 있습니다. 나는 프로그램을 더 빨리 만드는 방법에 대한 통찰력을 얻는 것에 더 관심이있다. 그게 목표라면,이 도움이 될 수 있습니다 * (http://stackoverflow.com/a/1779343/23771). 당신은 아마도 최적의 프로그램으로 추정되는 지방량을 얼마만큼 줄일 수 있는지 놀랄 것입니다. –

+0

다시 한번 감사드립니다. 이 주제를 읽을 것이지만, 가장 빠른 알고리즘을 찾는 것이 아니라 성능을 측정하는 것이 목적입니다. 그게 전부입니다. 단일 테스트 (하나의 함수 호출)는 벤치 마크에서 의미가 없다는 것을 알고 있습니다. 내 측정 값 '유용한'결과를 얻을 수 있다면, 바로이 일을하는지 궁금해합니다. – nullpointer