Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Как вызвать провал конвейера?

#железо #процессор


Как вызывать провал конвейера на современном процессоре?
Было несколько идей, но я не уверен в них:


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


Собственно, сабж.
    


Ответы

Ответ 1



Вариант 2 подходит. Ошибка предсказания перехода, вероятно, единственный верный шаг. Все остальные современные компиляторы скорее всего оптимизируют

Комментариев нет:

Отправить комментарий