Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > __builtin_expect(expr, code) - для чего она?


Автор: boostcoder 10.2.2012, 17:36
привет.

почитывал про http://www.imodulo.com/gnu/gcc/Other-Builtins.html в поисках возможности реализации/использования шаблонов для Си (__builtin_types_compatible_p() - но топик не об этом), и наткнулся на такую встроенную функцию как __builtin_expect(). (по этой же ссылке, но чуток ниже)
почитал описание, и нифига не понял smile 
Цитата

- Built-in Function: long __builtin_expect (long exp, long c)
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.

о чем говорится в описании - понял. но не понял, ее смысл только для профилирования? или я таки действительно не понял?

спасибо.

Автор: bsa 11.2.2012, 10:05
boostcoder, это нужно не для профилирования, а для оптимизации. У современных процессоров есть такая фишка, называется "предсказатель условных переходов". Если он неверно предсказал, то происходит остановка исполняющих блоков, откат результатов параллельных вычислений и вычисление заново (ты помнишь, наверное, что ядра современных процессоров выполняют более одной инструкции за такт). Эта функция подсказывает компилятору, что скорее всего результатом будет такое-то значение. Благодаря этому компилятор сделает такой код, что предсказатель будет реже ошибаться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)