小编Nei*_*tel的帖子

高速缓存内存优化数组转置:C

typedef int array[2][2];

void transpose(array dst, array src) {
    int i, j;
    for (j = 0; j < 2; j++) {
        for (i = 0; i < 2; i++) {
            dst[i][j] = src[j][i];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

src数组从地址0开始,dst数组从地址0x10开始.

L1数据缓存,直接映射,写分配,8字节块大小.

缓存总大小为16个数据字节.

src和dst数组的每个条目的命中或错过是什么?

答案是:

src: 
[0][0] -> miss,
[0][1] -> miss,
[1][0] -> miss,
[1][1] -> hit

dst:
[0][0] -> miss,
[0][1] -> miss,
[1][0] -> miss,
[1][1] -> miss
Run Code Online (Sandbox Code Playgroud)

如果缓存总大小为32个数据字节,答案是:

src: 
[0][0] -> miss,
[0][1] -> hit,
[1][0] -> miss,
[1][1] -> …
Run Code Online (Sandbox Code Playgroud)

c arrays caching transpose

7
推荐指数
1
解决办法
1301
查看次数

标签 统计

arrays ×1

c ×1

caching ×1

transpose ×1