LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Nick Piggin <nickpiggin@yahoo.com.au>
To: Andi Kleen <andi@firstfloor.org>
Cc: Arjan van de Ven <arjan@infradead.org>, Willy Tarreau <w@1wt.eu>,
Roel Kluin <12o3l@tiscali.nl>,
geoffrey.levand@am.sony.com, linuxppc-dev@ozlabs.org,
cbe-oss-dev@ozlabs.org, lkml <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/3] Fix Unlikely(x) == y
Date: Wed, 20 Feb 2008 09:25:12 +1100 [thread overview]
Message-ID: <200802200925.13366.nickpiggin@yahoo.com.au> (raw)
In-Reply-To: <20080219095702.GA6940@one.firstfloor.org>
On Tuesday 19 February 2008 20:57, Andi Kleen wrote:
> On Tue, Feb 19, 2008 at 08:46:46PM +1100, Nick Piggin wrote:
> > I think it was just a simple context switch benchmark, but not lmbench
> > (which I found to be a bit too variable). But it was a long time ago...
>
> Do you still have it?
>
> I thought about writing my own but ended up being too lazy for that @)
Had a quick look but couldn't find it. It was just two threads running
and switching to each other with a couple of mutexes or yield. If I
find it, then I'll send it over.
> > > > Actually one thing I don't like about gcc is that I think it still
> > > > emits cmovs for likely/unlikely branches,
> > >
> > > That's -Os.
> >
> > And -O2 and -O3, on the gccs that I'm using, AFAIKS.
>
> Well if it still happens on gcc 4.2 with P4 tuning you should
> perhaps open a gcc PR. They tend to ignore these bugs mostly in
> my experience, but sometimes they act on them.
I'm not sure about P4 tuning... But even IMO it should not on
predictable branches too much for any (especially OOOE) CPU.
> > > > which is silly (the gcc developers
> > >
> > > It depends on the CPU. e.g. on K8 and P6 using CMOV if possible
> > > makes sense. P4 doesn't like it though.
> >
> > If the branch is completely predictable (eg. annotated), then I
> > think branches should be used anyway. Even on well predicted
> > branches, cmov is similar speed on microbenchmarks, but it will
> > increase data hazards I think, so it will probably be worse for
> > some real world situations.
>
> At least the respective optimization manuals say they should be used.
> I presume they only made this recommendation after some extensive
> benchmarking.
What I have seen is that they tell you definitely not to use it for
predictable branches. Eg. the Intel optimization manual says
Use the setcc and cmov instructions to eliminate unpredictable
conditional branches where possible. Do not do this for predictable
branches. Do not use these instructions to eliminate all
unpredictable conditional branches, because using these instructions
will incur execution overhead due to executing both paths of a
conditional branch. In addition, converting conditional branches to
cmovs or setcc trades control-flow dependence for data dependence
and restricts the capability of the out-of-order engine.
> > But a likely branch will be _strongly_ predicted to be taken,
> > wheras a lot of the gcc heuristics simply have slightly more or
> > slightly less probability. So it's not just a question of which
> > way is more likely, but also _how_ likely it is to go that way.
>
> Yes, but a lot of the heuristics are pretty strong (>80%) and gcc will
> act on them unless it has a very strong contra cue. And that should
> normally not be the case.
True, but if you know a branch is 99%+, then use of likely/unlikely
can still be a good idea. 80% may not be enough to choose a branch
over a cmov for example.
next prev parent reply other threads:[~2008-02-19 22:25 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-16 16:08 Roel Kluin
2008-02-16 17:25 ` Arjan van de Ven
2008-02-16 17:33 ` Willy Tarreau
2008-02-16 17:42 ` Arjan van de Ven
2008-02-16 17:58 ` Willy Tarreau
2008-02-16 18:29 ` Arjan van de Ven
2008-02-17 9:45 ` [Cbe-oss-dev] " Andrew Pinski
2008-02-17 10:08 ` Willy Tarreau
2008-02-16 18:31 ` Geoff Levand
2008-02-16 18:39 ` Arjan van de Ven
2008-02-17 11:50 ` Michael Ellerman
2008-02-18 13:56 ` Adrian Bunk
2008-02-18 14:01 ` Geert Uytterhoeven
2008-02-18 14:13 ` Adrian Bunk
2008-02-18 21:46 ` Michael Ellerman
2008-02-19 7:43 ` Adrian Bunk
2008-02-18 19:22 ` [Cbe-oss-dev] " Andrew Pinski
2008-02-18 14:27 ` David Howells
2008-02-18 14:59 ` Roel Kluin
2008-02-18 18:11 ` Valdis.Kletnieks
2008-02-18 18:33 ` Arjan van de Ven
2008-02-18 14:39 ` Andi Kleen
2008-02-19 2:33 ` Nick Piggin
2008-02-19 2:40 ` Arjan van de Ven
2008-02-19 4:41 ` Nick Piggin
2008-02-19 5:58 ` Willy Tarreau
2008-02-19 6:20 ` Nick Piggin
2008-02-19 9:28 ` Andi Kleen
2008-02-20 7:32 ` Willy Tarreau
2008-02-19 9:25 ` Andi Kleen
2008-02-19 9:46 ` Nick Piggin
2008-02-19 9:57 ` Andi Kleen
2008-02-19 22:25 ` Nick Piggin [this message]
2008-02-16 18:41 ` Geoff Levand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200802200925.13366.nickpiggin@yahoo.com.au \
--to=nickpiggin@yahoo.com.au \
--cc=12o3l@tiscali.nl \
--cc=andi@firstfloor.org \
--cc=arjan@infradead.org \
--cc=cbe-oss-dev@ozlabs.org \
--cc=geoffrey.levand@am.sony.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=w@1wt.eu \
--subject='Re: [PATCH 1/3] Fix Unlikely(x) == y' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).