ベンチマークコード

C言語ベンチマークを計るコードを書いてみました。

標準のライブラリに恐らく存在するとは思いますが、time.hのclock関数の使い方に慣れるという意味で実装してみました。

#include <time.h>
#include <stdio.h>

double benchmark(int,void (*)(void));

double benchmark(int count,void (*func)(void)){
    clock_t start,end;
    int i;
    start = clock();
    
    for(i=0;i<count;++i){
        (*func)();
    }
    
    end = clock();
    return (end - start) / (double)CLOCKS_PER_SEC;
}

void foo(void) {
    int i;
    for(i=0;i<100;++i) {
        i++;
    }
}

void bar(void) {
    int i;
    for(i=0;i<100;i+=2) {}
}

int main (void) {
    int count = 10000000;
    
    printf("%f sec\n",benchmark(count,foo));
    printf("%f sec\n",benchmark(count,bar));
    return 0;
}

とても単純な仕組みです。benchmark関数を提供し、第一引数に検証回数を指定し、第二引数に検証する関数のポインタを渡します。

渡す関数ポインタは引数も戻り値も無い定義になります。

void (*func)(void);

ちょっとしたコードの検証をするのに役立てたいと思います。