キャッシュを考慮したプログラミング-失敗編-

配列を、量を変動させながら舐めまわしていくプログラムを書いてやって、読み込むデータの量が大きくなって行くと、ある量からはキャッシュにデータが載りきらなくなって、急に遅くなったりするんだよーって実演しようと思ったのだけど、思ったような結果が得られなかった。


ありゃりゃ。


本当なら、一次キャッシュと2次キャッシュのサイズ周辺で変化が見られるはずなんだけどな。

  • コード


#include
#include
#include
#include

#define ARR_LENGTH 1024*1024
#define INCREMENT_WIDTH 1024
#define EACH_TEST_COUNT 100
#define ALL_TEST_COUNT ((int)(ARR_LENGTH / INCREMENT_WIDTH))

double gettimeofday_sec()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + (double)tv.tv_usec*1e-6;
}

void main(){
int arr[ARR_LENGTH];
double results[ALL_TEST_COUNT];
int i,j;
int dummy_arr_length,count,sum;
double start,end;
FILE *fout;

srand(time(NULL));
for(i=0;i

  • コンパイル

gcc -pg -o cache_test.out cache_test.c

  • グラフ

CSVをExcelで見てみれば?