当前位置: 代码迷 >> 综合 >> CSAPP 数组访问模式测试
  详细解决方案

CSAPP 数组访问模式测试

热度:16   发布时间:2023-11-13 18:11:24.0

一、已知结论

  1. 数组按行顺序步长为1访问模式具有最好的空间局部性-数组在内存中顺序存放
  2. 顺序访问对高速缓存友好

二、测试代码

  1. 测试数组按行顺序和列顺序的时间倍数差
  2. 测试数据:400MB数组大小 64位机器 六核i7
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define N 10000
#define M 10000
#define LEN N*M void sum(int *a) {
      // 按行访问int i, j, res = 0;for (i = 0; i < N; i++) for (j = 0; j < M; j++)res += *(a+N*i+j);
}void sum2(int *a) {
      // 按列访问int i, j, res = 0;for (j = 0; j < M; j++) for (i = 0; i < N; i++)res += *(a+N*i+j);
}int main()
{
    int *a = (int*)malloc(sizeof(int)*LEN);  // 400MB for (int i = 0; i < LEN; i++)a[i] = 1;clock_t start_time, finish_time;double total_time;start_time = clock();// sum(a); // 0.18ssum2(a); // 0.63sfinish_time = clock();total_time = (double)(finish_time - start_time) / CLOCKS_PER_SEC;printf("%fsec\n", total_time);return 0;
}
  1. 结论:本次测试中 行访问比列访问快3倍 结果显然与数据大小的机器配置相关