Re: likely/unlikely macro.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thank you for your reply.

So, for example, the expression "if (likely(prev != next))" is same as "if
((prev != next) == 1)", isn't it?
Then, unlikely is opposite of that.

Now the things came to be clearer, thanks.

And I'm sorry for my HTML mail. I didn't notice that because I used my
provider's html mail site to send the mail from remote with http access.
I'll care it next time.

Thanks,
Shinpei Kato

On Thu, 04 Dec 2003 11:15:51 +0300
"Ruslan U. Zakirov" <cubic@wildgate.miee.ru> wrote:

> > shinny@j02.itscom.net wrote:
> 
> >Hi,
> >
> >How may I ask for your help?
> >Now I'm studying the linux scheduler(sched.c).
> >And I'm wondering what likey()/unlikely macros mean.
> >I could find they're defined in linux/compiler.h as follows.
> >
> >/*
> > * Generic compiler-dependent macros required for kernel
> > * build go below this comment. Actual compiler/compiler version
> > * specific implementations come from the above header files
> > */
> >
> >#define likely(x)	__builtin_expect(!!(x), 1)
> >#define unlikely(x)	__builtin_expect(!!(x), 0)
> >
> >And I could find __builtin_expect()'s definition only in linux/compiler-gcc2.h as a follow.
> >I don't know what's going if __GNUC_MINOR__ is over 96, though...
> >
> >#if __GNUC_MINOR__ < 96
> ># define __builtin_expect(x, expected_value) (x)
> >#endif
> >
> >As a result, although it seems likely() and unlikely() do nothing, is my expectation correct?
> >If there are other references about this, please let me know.
> >  
> >
> Hello.
> As I've understand gcc after 96 introduced new feature which helps
> programmer suggest
> to compiler wishful execution branch of code. Compiler use this build in
> for optimizing.
> Gcc docs:
> long *__builtin_expect*/ /(/long /exp/, long /c)/ / 	Built-in Function
> 
> You may use |__builtin_expect| to provide the compiler with branch
> prediction information. In general, you should prefer to use actual
> profile feedback for this (|-fprofile-arcs|), as programmers are
> notoriously bad at predicting how their programs actually perform.
> However, there are applications in which this data is hard to collect.
> 
> The return value is the value of exp, which should be an integral
> expression. The value of c must be a compile-time constant. The
> semantics of the built-in are that it is expected that exp == c. For
> example:
> 
>           if (__builtin_expect (x, 0))
>             foo ();
>           
> 
> would indicate that we do not expect to call |foo|, since we expect |x|
> to be zero. Since you are limited to integral expressions for exp, you
> should use constructions such as
> 
>           if (__builtin_expect (ptr != NULL, 1))
>             error ();
>           
> 
> when testing pointer or floating-point values.
> 
> Good luck. Ruslan.
> PS: Don't send html letters in future.
> 
> --
> Kernelnewbies: Help each other learn about the Linux kernel.
> Archive:       http://mail.nl.linux.org/kernelnewbies/
> FAQ:           http://kernelnewbies.org/faq/
> 



--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux