Subject: Re: performance impact of branch prediction?
To: Hubert Feyrer <hubert@feyrer.de>
From: Nathan J. Williams <nathanw@wasabisystems.com>
List: tech-kern
Date: 04/21/2006 14:26:18
Hubert Feyrer <hubert@feyrer.de> writes:
> Branch prediction is used in many parts throught the kernel, e.g.
>
> subr_pool.c: if (__predict_false((pc->pc_pool->pr_flags & PR_WANTED) != 0)) {
> subr_pool.c- goto destruct;
> subr_pool.c- }
>
> Does anyone know the performance impact of this prediction?
> Were any kind of measurements done? What were the results?
Note that __predict_false() isn't really about the microarchitectural
concept of branch prediction; it's more about moving code out-of-line
to reduce the memory footprint of the common path. That is, the
following code:
A
if (B)
C
D
would typically assemble to something like:
A
evaluate B
if false, goto 1f:
C
1f:
D
changing (B) to __predict_false(B) makes it likely to be rearranged
as:
A
evaluate B
if true, goto 2f:
1f:
D
...
return
2f:
C
goto 1f
I doubt it helps much when the wrapped code is a single goto.
At the microarchitectural level, dynamic branch prediction is
considered more useful these days than static compiler-generated
branch prediction anyway.
- Nathan