#железо #процессор
Как вызывать провал конвейера на современном процессоре?
Было несколько идей, но я не уверен в них:
В условный оператор if запихать кучу условий (например, if(A&0&B&C.....), где A,B,C
- какие-то операции). Предполагал, что в процессор произойдет загрузка всех операций,
но после второй будет произведен сброс конвейера. Тем самым будет простой размером
примерно с количество ступеней конвейера.
С помощью расширения GCC __builtin_expect направить процессор на ложную ветку if-else.
Предполагал, что в процессор будет произведена загрузка операций, которые не будут
выполнены. Конвейер будет сброшен.
Собственно, сабж.
Ответы
Ответ 1
Вариант 2 подходит. Ошибка предсказания перехода, вероятно, единственный верный шаг. Все остальные современные компиляторы скорее всего оптимизируют
Комментариев нет:
Отправить комментарий