Из-за огромного влияния на производительность я никогда не задумываюсь, есть ли у моего текущего настольного процессора предсказание ветвления. Конечно, есть.Но как насчет различных предложений ARM? Есть ли у iPhone или Android-телефонов предсказание ветвления? Старая Nintendo DS? Как насчет Wii на базе PowerPC? PS 3?
Имеют ли они комплексный блок предсказания, не так важно, но есть ли у них хотя бы какое-то динамическое предсказание, и выполняют ли они некоторое выполнение инструкций, следующих за ожидаемая ветка.
Какое пороговое значение для процессоров с предсказанием ветвлений? В ручном калькуляторе десятилетней давности его явно нет, а в моем настольном. Но может ли кто-нибудь более четко обозначить, где можно ожидать динамического предсказания ветвления?
Если это неясно, я говорю о типе предсказания, при котором условие меняется, варьируя ожидаемый путь во время выполнения.
Любой ЦП с конвейером за несколько стадий требует, по крайней мере, некоторого примитивного предсказания ветвления, в противном случае он может затормозить в ожидании результатов вычисления, чтобы решить, каким путем идти. Intel Atom представляет собой ядро в порядке, но с довольно глубоким конвейером, и поэтому для него требуется довольно приличный предсказатель ветвления.
Старые проекты ARM 7 были только три этапа. Объедините это с такими вещами, как интервалы задержки ветвления (требуются в MIPS, необязательны в SPARC) и предсказание ветвлений не так полезно.
Кстати, когда MIPS решил повысить производительность, выйдя за пределы 4 этапов конвейера, интервал задержки перехода стал раздражающим. В оригинальном дизайне это было необходимо, потому что не было предсказателя ветвлений. Следовательно, вы должны были упорядочить инструкцию ветвления до последней инструкции, выполняемой перед ветвью. С более длинным конвейером им требовался предиктор ветвления, устраняющий необходимость в слоте задержки ветвления, но им все равно приходилось эмулировать его для запуска старого кода.
Проблема с интервалом задержки ветвления состоит в том, что он может быть заполнен только полезной инструкцией примерно в 50% случаев. В остальное время вы либо заполняете его инструкцией, результат которой, вероятно, будет отброшен, либо используете NO-OP.
Не так много для ARM Cortex-A8 (хотя у него есть некоторое предсказание ветвления), но я считаю, что Cortex-A9 является суперскалярным не по порядку со сложным предсказанием ветвления.