На современном Pentium уже невозможно дать ответные ответвления процессору. Предполагая, что профилирующий компилятор, такой как gcc с оптимизацией на основе профиля, получает информацию о вероятном ветвящем поведении, что он может сделать для создания кода, который будет выполняться быстрее?
Единственный вариант, о котором я знаю, - это переместить маловероятные ветки в конец функции. Есть ли что-нибудь еще?
Обновить.
http://download.intel.com/products/processor/manual/325462.pdf том 2a, раздел 2.1.1 говорит
"Префикс подсказки для ветки (2EH, 3EH) позволяет программе давать подсказку процессору о наиболее вероятном пути кода для отделение. Используйте эти префиксы только с условными инструкциями ветвления (Jcc). Другое использование префикса подсказок для ветки и/или другие коды undefined с инструкциями Intel 64 или IA-32 зарезервированы; такое использование может привести к непредсказуемым поведение ".
Я не знаю, действительно ли они имеют какой-либо эффект.
С другой стороны, раздел 3.4.1. http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf говорит
" Компиляторы генерируют код, который повышает эффективность прогнозирования отрасли в процессорах Intel. Intel Компилятор С++ выполняет это:
- сохранение кода и данных на отдельных страницах
- с помощью условных команд перемещения для устранения ветвей
- генерирующий код, соответствующий алгоритму прогнозирования статических ветвей
- вставка, где это уместно
- разворачивается, если число итераций предсказуемо
Оптимизация, ориентированная на профиль, компилятор может выложить основные блоки для устранения ветвей для большинства часто исполняемые пути функции или, по крайней мере, улучшают их предсказуемость. Необходимость прогнозирования отрасли не беспокойтесь об исходном уровне. Для получения дополнительной информации см. Документацию по компилятору Intel С++. "
http://cache-www.intel.com/cd/00/00/40/60/406096_406096.pdf говорится в "Улучшениях производительности с помощью PGO"
" PGO лучше всего подходит для кода со многими часто исполняемыми ветвями, которые трудно прогнозировать во время компиляции. Примером может служить код с интенсивной проверкой ошибок, в котором условия ошибки в большинстве случаев являются ложными. Чрезвычайно исполняемый (холодный) код обработки ошибок может быть перемещен, поэтому ветвь редко предсказана неправильно. минимизация холодный код, чередующийся в часто исполняемый (горячий) код, улучшает кеш команд поведение ".