gpt4 book ai didi

c++ - += 比 -= 快吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:46 25 4
gpt4 key购买 nike

完全披露 - 我的灵感来自 Is x += a quicker than x = x + a?

除此之外,我决定测试 +=-=。简单的测试表明它们大致相同。然后我尝试了类似的东西:

std::vector<int> x;
for (int i = 0 ; i < 10000 ; i++)
x.push_back(rand()%10);

并根据给定的数字按比例调用 +=-=:

long long sum = 0;

for ( each number in the array )
if ( x[j] < k )
sum += x[j];
else
sum -= x[j];

所以,如果 k 很小,-= 就会更频繁地被调用(duuuh)。我尝试使用 k = 2,它会给出更高比例的 -= 调用,而使用 k = 5,它应该产生大致相同的结果-=+= 的数量。

妙语:调用 -= 比调用 += 快两倍。为什么在这种情况下会更有效率?

最佳答案

I'm gonna jump in before Mysticial gets a hold of this and guess: branch prediction.

所以,这不是 -=对比+= .

条件x[j] < k当它几乎总是 true 时可以更好地预测或 false与它可以评估的数字数量大致相同时相比,情况可能会有所不同。

对于 k = 2 , 十分之一的人会评估为 false .

对于 k = 5 ,它们将大致相同并随机分布,因此更难预测。

编辑:参见 http://ideone.com/1PYMl - 所有额外的东西都是为了防止未使用的代码优化(cout s)。

tl;dr:不同 k 的结果:

k: 1 Time: 280
k: 2 Time: 360
k: 3 Time: 440
k: 4 Time: 520
k: 5 Time: 550
k: 6 Time: 510
k: 7 Time: 450
k: 8 Time: 360
k: 9 Time: 260

如你所见,越近k进入困惑变化的状态,程序需要更多。接近尾声时,大约需要一半的时间。

关于c++ - += 比 -= 快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12482610/

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