Комментарии 12
А еще можно делать профилирование (PGO, Profile-guided optimization), и компилятор учтёт статистику переходов. Это опции компилятора -fprofile-generate и -fprofile-use. Расставлять подсказки для компилятора вручную не очень эффективно.
Я так понял, что процессор примитивный (хотя и с кэшем) и в нем нет никакого предсказателя ветвлений. Тогда подсказывать компилятору иногда полезно, если код активно используется.
нет никакого предсказателя ветвлений.
Вот и я на это обратил внимание. Что для современного процессора это не будет играть большого значения, так как у них очень развитые алгоритмы предсказания переходов.
Разве что для старых Atom-ов.
Речь как раз о том, что даже имея современный процессор, иногда, полезно подсказать компилятору какую ветвь выбирать
На эту тему тут была хорошая статья
https://habr.com/ru/articles/337000/
Получается что для примитивных процессоров - такой "хинт" компилятору это плюс. Т.к. он разместит вероятный кода сразу за if и не будет никаких промахов и перезагрузки конвеера. С другой стороны, у этих самых примитивных процессоров конвеер или короткий или его нет вообще, поэтому и плата за промах минимальная.
Для современных процессоров, такой "хинт" подскажет процессору куда идти при первом срабатывании, а дальше он уже сам.
зачем какой-то непонятный интринсик, если уже завезли [[likely]] и [[unlikely]]?
Москвичи указывают номер телефона без кода города, американцы - без кода страны, а линуксоиды считают, что "компилятор" бывает только gcc. :)
Мы там на Котлинах своих из блока if результат часто получаем, а вы думаете о том, как его лучше вызвать...
Правильный if для ускорения работы