__builtin_expect из GCC с вероятностью
-
11-10-2019 - |
Вопрос
__builtin_expect
От GCC может использоваться программистом, чтобы показать, какие варианты должны быть очень часто, а какие редки. Но __builtin_expect
иметь только «истинность» и «ложь» (вероятность 0% или 100%)
Для некоторых крупных проектов трудно получить обратную связь профиля (-fprofile-arcs
), а иногда и программист знает, какую вероятность того, что он имеет в какой -то момент программы.
Компилятор можно дать намек на то, что ветвь имеет вероятность> 0% и <100%?
Решение
Правда и ложь действительно означают, что «первый вариант более вероятен» и «второй вариант более вероятен». Там нет практической потребности в каких -либо ценностях, кроме этих. Компилятор не сможет использовать эту информацию.
Другие советы
Из здесь:
длинная __builtin_expect_with_probability
(длинная эксплуат, длинная в, двойной вероятность) Функция имеет ту же семантику, что и
__builtin_expect
, но вызывающий вызывание обеспечивает ожидаемую вероятность, чтоexp == c
. Анкет Последний аргумент вероятность является плавающей стоимостью в инклюзивном диапазоне 0,0F и 1,0F.
Недотерминизм не является желательной чертой для вывода компилятора, не говоря уже о языковых характеристиках. Нет реальной выгоды только частичной оптимизации, предпочитая одну ветвь, и ни один компилятор, о котором я знаю, не может сделать это.