__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.

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

Другие вопросы по тегам