Re: Do we need the gcc feature "__builtin_expect" to promote the branches prediction?

From: Craig Ringer <craig(dot)ringer(at)2ndquadrant(dot)com>
To: Hao Lee <mixtrue(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Do we need the gcc feature "__builtin_expect" to promote the branches prediction?
Date: 2017-06-02 10:50:15
Message-ID: CAMsr+YGW0UZyoOP+fCHb43h=DD8WCXNoLJGnua4ADZStt44jpA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 2 Jun. 2017 16:42, "Hao Lee" <mixtrue(at)gmail(dot)com> wrote:

Hi all,
There is a lot of "if statement" in system, and GCC provides a
feature,"__builtin_expect", which let compilers know which branch is
mostly run.

Compilers and CPUs are really good at guessing this.

Humans are wrong about it more than we'd like too.

It's surprisingly rarely s good idea to use branch prediction hints.

See the vsrious Linux kernel discussions about this.

If you find concrete sites of frequent or costly branch mis-prediction
please point them out, with benchmarks.

. as we known, miss-prediction will lead the performance lost(because the
CPU will thrown away some instructions, and re-fetch some new
instructions). so that we can tell GCC how produce more efficient code. for
example as following.
It will gain performance promotion i think. As i know, the in Linux kernel,
this feature is also applied already.

#define likely(cond) __builtin_expect(cond,true)
#define unlikely(cond) __builtin_expect(cond,false)

if (likely(cond)) {
//most likely run.
xxxx
} else //otherwise.
{
xxxx
}

Best Regards.

Hom.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dmitriy Sarafannikov 2017-06-02 10:50:49 Re: Broken hint bits (freeze)
Previous Message Marko Tiikkaja 2017-06-02 10:48:12 PG10 transition tables, wCTEs and multiple operations on the same table