Я в настоящее время представляю реализацию двоичного поиска. Используя некоторые специальные инструкции измерить это я заметил, что код имеет приблизительно 20% misprediction уровень. Мне любопытно, если существует какой-либо способ проверить, сколько циклов я потенциально проигрываю из-за этого. Это - основанная на MIPS архитектура.
Поищите это в документации для вашего процессора. Если вы не можете найти эту информацию специально, длина конвейера процессора является достаточно хорошей оценкой.
Учитывая, что это MIPS и это 300 МГц система, я собираюсь предположить, что это довольно короткий конвейер. Возможно, 4-5 этапов, так что стоимость 3-4 тактов за неправильное предсказание, вероятно, является разумным предположением.
Вы теряете 0.2 * N циклов на итерацию, где N - количество циклов, которое требуется для промывки конвейеров после неправильно предсказанного ответвления. Предположим, N = 10, тогда это означает, что вы теряете в совокупности 2 такта за итерацию. Если только у вас нет очень маленького внутреннего цикла, то это, вероятно, не будет значительным снижением производительности.
Посмотрите в своих спецификациях на эту информацию, и, если это не поможет, запустите ее миллиард раз и установите время вне вашей программы (секундомер чего-нибудь). Затем запустите ее без промаха и сравните.