C 如何存储阵列以适应缓存线大小

C 如何存储阵列以适应缓存线大小,c,performance,cpu,cpu-cache,cpu-speed,C,Performance,Cpu,Cpu Cache,Cpu Speed,我想要一个包含32个64位数字元素的数组,如下所示: 长整数arr[32] 但是,我的缓存线大小是64字节。这是否意味着我的数组根本不会进入缓存系统,或者某些元素就可以了 如果我像这样将阵列拆分为二维,是否有助于安装缓存: 长整数arr[4][8] 您的数组是256字节,因此它不能放入一个64字节的缓存线中 拆分数组不会减小其大小,因此#1仍然适用 您的CPU有多条缓存线,因此您担心的任何缓存中都可能有256个字节 无论如何分割,都不能将256个字节放入64个字节。重要的是按顺序访问阵列,这将最

我想要一个包含32个64位数字元素的数组,如下所示: 长整数arr[32]

但是,我的缓存线大小是64字节。这是否意味着我的数组根本不会进入缓存系统,或者某些元素就可以了

如果我像这样将阵列拆分为二维,是否有助于安装缓存: 长整数arr[4][8]

  • 您的数组是256字节,因此它不能放入一个64字节的缓存线中
  • 拆分数组不会减小其大小,因此#1仍然适用
  • 您的CPU有多条缓存线,因此您担心的任何缓存中都可能有256个字节

  • 无论如何分割,都不能将256个字节放入64个字节。重要的是按顺序访问阵列,这将最大限度地减少缓存未命中率。也许我应该有4个阵列arr1[8]、arr2[8]、arr3[8]、arr4[8],它们都完全适合缓存线?我希望避免任何对内存的访问,但访问阵列可能不是按顺序进行的。如果从
    arr1
    转到
    arr2
    ,则必须访问内存,因为它们不能同时位于缓存线中。该阵列已经有4个适合缓存线的块(假设是64对齐的),给块赋予不同的名称没有任何区别。将添加“4.您唯一能做的实际有用的事情是确保数组的开始在缓存线边界上对齐;这样它就需要4条完整缓存线,而不是(例如)半条缓存线,然后是3条完整缓存线,然后是另一半缓存线。”布伦丹-我如何才能做到这一点(确保)?