__builtin_expect от GCC с вероятностью
__builtin_expect
из GCC может использоваться программистом, чтобы показать, какие варианты ожидаются очень часто, а какие редко. Но __builtin_expect
иметь только "истина" и "ложь" (вероятность 0% или 100%)
Для некоторых крупных проектов сложно получить отзыв о профиле (-fprofile-arcs
), а иногда программист знает, какая вероятность перехода у него в какой-то момент программы.
Можно дать подсказку компилятору, что ветвь имеет вероятность>0% и <100%?
3 ответа
Истина и ложь действительно означают, что "первый вариант более вероятен" и "второй вариант более вероятен". Нет никакой практической необходимости в каких-либо ценностях, кроме этих. Компилятор не сможет использовать эту информацию.
long __builtin_expect_with_probability
(long exp, long c, двойная вероятность) Функция имеет ту же семантику, что и
__builtin_expect
, но вызывающая сторона обеспечивает ожидаемую вероятность того, чтоexp == c
, Вероятность последнего аргумента - это плавающее значение в включающем диапазоне 0.0f и 1.0f.
Недетерминизм - нежелательная черта для вывода компилятора, не говоря уже о языковых особенностях. Нет никакой реальной выгоды в частичной оптимизации, предпочитающей одну ветку, и ни один из известных мне компиляторов не сможет это сделать.