繁体   English   中英

数据更改时的 CPU 缓存行为

[英]CPU Cache Behaviour when Data Changes

我只是想知道数据更改如何影响 CPU 缓存。

假设我有以下 C 代码:

int main() {
  int arr[16] = ...

  for (int i = 1; i < 16; i++) {
    arr[i] = arr[i] + arr[i-1];
  }

  for (int i = 0; i < 16; i++) {
   arr[i] += arr[i];
  }
}

由于在每个循环中写入 memory,CPU 需要多少次重新加载缓存中的数字?

确切的答案取决于缓存配置的特定于机器的详细信息。 一般来说,唯一可以确定的方法是使用硬件计数器和PAPI等工具进行测量。

然而,一般来说,从核心写入将更新 L1 缓存中的副本,以便稍后对同一地址的后续读取将从缓存中返回更新的副本而不会丢失(假设缓存行在间隔内未被驱逐) ).

对于您显示的代码(具有 16 个 4 字节元素的一维数组),您只处理 64 个字节,这是大多数现代处理器上的 1 个缓存行(或 2 个取决于对齐方式),因此它很可能被加载在初始化元素时进入 L1 缓存,并在缓存中为两个循环操作(假设没有来自其他线程的其他冲突访问)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM