rowとcolumnのアクセス速度の差 (キャッシュにヒットするかどうかという話)
Cはrow-majorだからa[i][j]ってやったときはjを小さいほうのループにすべきという話
//! gcc -o array.bin array.c -W -Wall -O3 -std=gnu99 #include <stdio.h> #include <stdint.h> #define RDTSC(X)\ asm volatile ( "rdtsc" : "=A" (X) ) #define ROW 32 #define COLUMN 8 int main( void ) { int i, j; volatile uint64_t before, after; volatile int a[ ROW ][ COLUMN ] = {{ 0 }}; volatile int b[ ROW ][ COLUMN ] = {{ 0 }}; RDTSC( before ); for ( i = 0; i < ROW; i++ ) for ( j = 0; j < COLUMN; j++ ) a[ i ][ j ] ++; RDTSC( after ); printf( "%10llu\n", after - before ); RDTSC( before ); for ( j = 0; j < COLUMN; j++ ) for ( i = 0; i < ROW; i++ ) b[ i ][ j ] ++; RDTSC( after ); printf( "%10llu\n", after - before ); return 0; }