Pull to refresh

Comments 12

А еще можно делать профилирование (PGO, Profile-guided optimization), и компилятор учтёт статистику переходов. Это опции компилятора -fprofile-generate и -fprofile-use. Расставлять подсказки для компилятора вручную не очень эффективно.

Спасибо, интересная идея!

Я так понял, что процессор примитивный (хотя и с кэшем) и в нем нет никакого предсказателя ветвлений. Тогда подсказывать компилятору иногда полезно, если код активно используется.

нет никакого предсказателя ветвлений.

Вот и я на это обратил внимание. Что для современного процессора это не будет играть большого значения, так как у них очень развитые алгоритмы предсказания переходов.

Разве что для старых Atom-ов.

Речь как раз о том, что даже имея современный процессор, иногда, полезно подсказать компилятору какую ветвь выбирать

На эту тему тут была хорошая статья
https://habr.com/ru/articles/337000/

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

Для современных процессоров, такой "хинт" подскажет процессору куда идти при первом срабатывании, а дальше он уже сам.

зачем какой-то непонятный интринсик, если уже завезли [[likely]] и [[unlikely]]?

Не все поддерживают 20 стандарт. Даже используя [[likely]] и [[unlikely]] механика будет подобна описанному. Статья об использовании этого механизма)

А все ли компиляторы поддерживают __builtin_expect ? Без упоминания [[likely]] и [[unlikely]] всё таки тема не до конца раскрыта.

Москвичи указывают номер телефона без кода города, американцы - без кода страны, а линуксоиды считают, что "компилятор" бывает только gcc. :)

Ну есть ещё LLVM, но с ним несколько иная история )

Хотя подобная оптимизация для современных процессоров, лично мне, интересней была бы для SDCC, чем для GCC. Там предсказаний ветвлений пока ожидать не приходится.

Мы там на Котлинах своих из блока if результат часто получаем, а вы думаете о том, как его лучше вызвать...

Sign up to leave a comment.