調べたこと、作ったことをメモしています。
こちらに移行中: https://blog.shimazu.me/

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;
}