Как Вы измеряете эффект ответвления misprediction?

Я в настоящее время представляю реализацию двоичного поиска. Используя некоторые специальные инструкции измерить это я заметил, что код имеет приблизительно 20% misprediction уровень. Мне любопытно, если существует какой-либо способ проверить, сколько циклов я потенциально проигрываю из-за этого. Это - основанная на MIPS архитектура.

9
задан Matt Wamboldt 20 May 2010 в 21:22
поделиться

3 ответа

Поищите это в документации для вашего процессора. Если вы не можете найти эту информацию специально, длина конвейера процессора является достаточно хорошей оценкой.

Учитывая, что это MIPS и это 300 МГц система, я собираюсь предположить, что это довольно короткий конвейер. Возможно, 4-5 этапов, так что стоимость 3-4 тактов за неправильное предсказание, вероятно, является разумным предположением.

1
ответ дан 4 December 2019 в 23:38
поделиться

Вы теряете 0.2 * N циклов на итерацию, где N - количество циклов, которое требуется для промывки конвейеров после неправильно предсказанного ответвления. Предположим, N = 10, тогда это означает, что вы теряете в совокупности 2 такта за итерацию. Если только у вас нет очень маленького внутреннего цикла, то это, вероятно, не будет значительным снижением производительности.

4
ответ дан 4 December 2019 в 23:38
поделиться

Посмотрите в своих спецификациях на эту информацию, и, если это не поможет, запустите ее миллиард раз и установите время вне вашей программы (секундомер чего-нибудь). Затем запустите ее без промаха и сравните.

0
ответ дан 4 December 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: