Inspired by this question: Why is a sorted array faster to process than an unsorted array?
I wrote my own branch prediction experiment:
public class BranchPrediction { public static void main(final String[] args) { long start; long sum = 0; start = System.nanoTime(); sum = 0; for (long i = 0; i < 10000000000L; ++i) sum += i; System.out.println(System.nanoTime() - start); System.out.println(sum); 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); start = System.nanoTime(); sum = 0; for (long i = 0; i < 10000000000L; ++i) sum += i; System.out.println(System.nanoTime() - start); System.out.println(sum); 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); } }
The result confuses me: in accordance with the output of the program, a loop with a branch is reliably faster than branch loops.
Output Example:
7949691477 -5340232226128654848 6947699555 -5340232226128654848 7920972795 -5340232226128654848 7055459799 -5340232226128654848
Why is this so?
Edit:
user972946
source share