gpt4 book ai didi

c++ - 为什么大小为 2 的幂的数组速度较慢?为什么我会获得 -rdynamic 性能?

转载 作者:太空狗 更新时间:2023-10-29 23:03:07 27 4
gpt4 key购买 nike

我在 for 循环中有一个简单的数组操作,它针对不同大小(从 16 到非常大)的数组完成,其中包含 double 。我做了几次:

for(int i = 1; i < n-1; i++){
target[i] = (source[i-1]+source[i]+source[i+1])*0.5;
}

我用“-O3 -march=native”编译了它并测量了速度。然后,出于与此处无关的原因,我尝试添加“-rdynamic”以显着加快速度,正如您在图中看到的那样。图例中的“cmake”指的是“-rdynamic”的添加。这仅适用于 i7-4790 CPU。我根本无法在 AMD Phenom II X6 1045T 上重现它。

我当然不明白为什么 -rdynamic 会产生那么大的加速。 (GLOPS = #updates of the array cells per second in billions)。为什么我会获得加速?为什么不在 AMD CPU 上?

请注意,这些测量值是两种情况下各十次测量值的平均值。

另一个有趣的观察是,至少在开始时,当数组适合 L1 缓存时,我有这些性能下降。有趣的是,当我的数组大小是 2 的幂时,就会发生这种情况。我猜这与 L2 缓存有关,但我完全不知道是什么以及为什么。也许有些缓存冲突或对齐?

enter image description here

编辑:我现在已经正确地绘制了: g++ -O3 -march=本地程序.cpp -rdynamic标记为“cmake”的曲线与添加“-rdynamic”相同。

编辑 2:完全从问题中删除了 cmake 叙述。[Peter]

最佳答案

我不知道为什么 rdynamic 会导致加速。但是关于你的第二个问题,请查看 Agner Fog 的指南“在 C++ 中优化软件”http://www.agner.org/optimize/optimizing_cpp.pdf .看看第 9.2 节,他谈到了临界步幅。可能适用于这种情况。

关于c++ - 为什么大小为 2 的幂的数组速度较慢?为什么我会获得 -rdynamic 性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26693982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com