Привлечет ли следующий код штраф за неправильное предсказание ветвления, скажем, для Intel Core i7?
for(i = 0, count = *ptr; i < count; i++) {
// do something
}
число может быть 0, 1 или 2.
Привлечет ли следующий код штраф за неправильное предсказание ветвления, скажем, для Intel Core i7?
for(i = 0, count = *ptr; i < count; i++) {
// do something
}
число может быть 0, 1 или 2.
Если count изменяется случайным образом, состояние цикла невозможно предсказать. Если он ведет себя по определенному шаблону - скажем, 0,1,2,1 несколько раз - это можно было бы точно предсказать на core2 или i7. Для других шаблонов это зависит.
См. Микроархитектура процессоров Intel, AMD и VIA: руководство по оптимизации для программистов на ассемблере и разработчиков компиляторов в главе «Предсказание ветвления» для более подробного объяснения.