什么是“缓存友好代码”以及它如何影响C++性能?
你好!我正在学习C++,遇到了术语“cache-friendly”(缓存友好)。我经常在性能讨论中看到代码应该是cache-friendly,但我不完全理解这在实践中意味着什么。
我有一个简单的例子。我正在处理1000×1000的矩阵(int)。以下是两种求和代码:
方案1:按行
```cpp
int sum = 0;
for (int i = 0; i < 1000; ++i)
for (int j = 0; j < 1000; ++j)
sum += matrix[i][j];
```
方案2:按列
```cpp
int sum = 0;
for (int j = 0; j < 1000; ++j)
for (int i = 0; i < 1000; ++i)
sum += matrix[i][j];
```
第一个方案在我的电脑上快5到10倍!我读到这与缓存有关,但为什么会有如此巨大的差异?如何判断代码是否对缓存友好?以及如何有意识地编写这样的代码,而不仅仅是记住模式?
感谢您提供详细的解释和示例。
<<>>