__builtin_expect от GCC с вероятностью - PullRequest
0 голосов
/ 16 ноября 2010
Программист может использовать

__builtin_expect из GCC, чтобы показать, какие варианты ожидаются очень часто, а какие редко.Но __builtin_expect имеют только «true» и «false» (вероятность 0% или 100%)

Для некоторых крупных проектов сложно получить обратную связь по профилю (-fprofile-arcs), и иногда программист знает,, какая вероятность ветвления у него в какой-то точке программы.

Можно дать подсказку компилятору, что вероятность ветвления> 0% и <100%? </p>

Ответы [ 3 ]

5 голосов
/ 16 ноября 2010

Истина и ложь действительно означают, что «первый вариант более вероятен» и «второй вариант более вероятен». Нет никакой практической необходимости в каких-либо ценностях, кроме этих. Компилятор не сможет использовать эту информацию.

3 голосов
/ 17 октября 2018

С здесь :

long __builtin_expect_with_probability

(long exp , long c , double вероятность ) Функция имеет ту же семантику, что и __builtin_expect, но вызывающая сторона обеспечивает ожидаемую вероятность того, что exp == c. Последний аргумент вероятность является плавающим значением в включенном диапазоне 0,0f и 1,0f.

0 голосов
/ 16 ноября 2010

Недетерминизм - нежелательная черта для вывода компилятора, не говоря уже о языковых особенностях.Нет никакой реальной выгоды в частичной оптимизации, предпочитающей одну ветку, и ни один из известных мне компиляторов не сможет это сделать.

...