Avatar ·

为什么在两个独立循环中逐元素相加比在单个合并循环中快得多?

各位同事好!我写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]; } }