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