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