gpt4 book ai didi

java - 为什么分支预测比完全没有分支要快?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:30:29 27 4
gpt4 key购买 nike

受这个问题的启发: Why is it faster to process a sorted array than an unsorted array?

我写了自己的分支预测实验:

public class BranchPrediction {
public static void main(final String[] args) {
long start;
long sum = 0;

/* No branch */
start = System.nanoTime();
sum = 0;
for (long i = 0; i < 10000000000L; ++i)
sum += i;
System.out.println(System.nanoTime() - start);
System.out.println(sum);

/* With branch */
start = System.nanoTime();
sum = 0;
for (long i = 0; i < 10000000000L; ++i)
if (i >= 0)
sum += i;
System.out.println(System.nanoTime() - start);
System.out.println(sum);

/* No branch (again) */
start = System.nanoTime();
sum = 0;
for (long i = 0; i < 10000000000L; ++i)
sum += i;
System.out.println(System.nanoTime() - start);
System.out.println(sum);

/* With branch (again) */
start = System.nanoTime();
sum = 0;
for (long i = 0; i < 10000000000L; ++i)
if (i >= 0)
sum += i;
System.out.println(System.nanoTime() - start);
System.out.println(sum);
}
}

结果让我感到困惑:根据程序输出,有分支的循环确实比没有分支的循环快。

示例输出:

7949691477
-5340232226128654848
6947699555
-5340232226128654848
7920972795
-5340232226128654848
7055459799
-5340232226128654848

为什么会这样?

编辑:

最佳答案

在我的其他机器(Intel 服务器和工作站)上运行相同的实验后,我可能会得出结论,我遇到的现象是这台笔记本电脑 CPU(Intel i7 Q740M)特有的。

==== 6 个月后编辑 ====

检查一下:http://eli.thegreenplace.net/2013/12/03/intel-i7-loop-performance-anomaly/

关于java - 为什么分支预测比完全没有分支要快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16879071/

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