为什么在两个独立循环中逐元素相加比在单个合并循环中快得多?
各位同事好!我写C++已经好几年了,但最近遇到了一个非常奇怪的性能行为,我无法解释。
我有两个数组:`a`和`b`,每个大小都是2000万个元素。我想先将它们逐元素相加并将结果写入数组`c`,然后将数组`c`的元素与数组`d`相加并写入数组`e`。我写了两个代码版本:第一个使用两个独立的循环,第二个使用一个合并的循环。
代码如下:
```cpp
#include
#include
#include
const size_t N = 20000000;
int main() {
std::vector a(N, 1);
std::vector b(N, 2);
std::vector c(N);
std::vector d(N, 3);
std::vector e(N);
// 版本1:两个独立循环
auto start1 = std::chrono::high_resolution_clock::now();
for (size_t i = 0; i < N; ++i) {
c[i] = a[i] + b[i];
}
for (size_t i = 0; i < N; ++i) {
e[i] = c[i] + d[i];
}
}