Как избежать в основном неиспользуемых условных переходов? - PullRequest
4 голосов
/ 09 июля 2020

Рассмотрим следующую ситуацию:

  • У вас есть макрос, который очень часто что-то делает во всем коде. (Например, некоторая обработка исключений)

  • Этот макрос обычно делает очень мало, но периодически возникают определенные обстоятельства, так что макрос должен делать намного больше ...

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

    • Многие современные предсказатели ветвления используют одни и те же структуры прогнозирования для нескольких ветвей, так что данные, собранные из других ветвей, влияют на предсказание каждой отдельной ветки! Таким образом, подавляющее количество ветвей, которые не выполняются большую часть времени, может «сбить с толку» предсказатель ветвлений, так что он будет делать ужасные прогнозы для других ветвей! Я обошел эту проблему?

      Обратите внимание, что, поскольку сложный код вызывается очень и очень редко, меня действительно не волнует эффективность в этом случае!

      (Отправная точка для исследования может быть: как языки вроде java могут решить эту проблему?)

...