В современном мире это не имеет большого значения, если это вообще так.
Динамическое прогнозирование ветвлений (о чем думали десятилетия (см. «Анализ рабочих нагрузок системы динамического прогнозирования ветвлений», опубликованный в 1996 г.)) - довольно распространенное место.
Пример этого можно найти в процессоре ARM. Из информационного центра Arm по прогнозированию отраслей
Для повышения точности прогнозирования ветвлений используется комбинация статических и динамических методов.
Тогда возникает вопрос: что такое динамическое предсказание ветвления в процессоре ARM? Последовательное чтение динамического прогнозирования ветвлений показывает, что в нем используется 2-битная схема прогнозирования (описанная в статье), которая позволяет получить информацию о том, является ли ветвь сильной или слабой или нет.
Со временем (и под временем я имею в виду несколько проходов через этот блок) это накапливает информацию о том, каким образом пойдет код.
Для статического предсказания он смотрит на то, как выглядит сам код и как выполняется ветвление в тесте - на предыдущую инструкцию или на следующую в коде:
Схема, используемая в процессоре ARM1136JF-S, предсказывает, что все прямые условные ветви не взяты, а все обратные ветви приняты. Приблизительно 65% всех ветвей предшествуют достаточному количеству циклов, не связанных с ветвями, чтобы быть полностью предсказанными.
Как упоминал Спарки, это основано на понимании того, что петля чаще всего петля. Цикл ветвится в обратном направлении (у него есть ветвь в конце цикла, чтобы перезапустить его вверху) - он обычно делает это.
Опасность попытки угадать компилятор заключается в том, что вы не знаете, как этот код будет скомпилирован (и оптимизирован). И по большей части это не имеет значения. С динамическим прогнозированием, дважды через функцию он будет предсказывать пропуск через оператор защиты для преждевременного возврата. Если производительность двух очищенных конвейеров имеет критическое значение, есть и другие проблемы, о которых следует беспокоиться.
Время, которое требуется для чтения одного стиля над другим, вероятно, имеет большее значение - сделать код чистым, чтобы человек мог его прочитать, потому что компилятор будет работать нормально, независимо от того, насколько беспорядочным или идеализированным вы будете писать код.