В прошлом номере я обещал рассказать о том, зачем современному процессору нужен блок предсказания переходов. Обещание свое постараюсь сдержать, а посему - читайте и вникайте.
Дело в том, что практически в любой программе встречаются так называемые безусловные и условные переходы. В первом случае ход выполнения всегда передается по новому указанному адресу, во втором - ход выполнения меняется в зависимости от результата выполнения какого-либо условия. В этих случаях конвейер CPU вынужден простаивать до получения нового адреса. Так как количество переходов в типичной программе достигает 30%, это существенно тормозит работу процессора. Таким образом, основная задача блока предсказания переходов сводится к тому, чтобы предугадать, с какого адреса продолжится выполнение программы после ветвления.
Предсказание происходит на основании информации об истории предыдущих переходов. При этом, если предсказание окажется верным, то выполнение программы продолжается практически без задержки. В случае ошибки частично выполненные команды из конвейера удаляются, а на их место поступают "верные" инструкции, выбранные из памяти по "правильным" адресам. "Просчеты" влекут за собой существенное снижение производительности процессора, особенно если конвейер имеет большое количество ступеней (именно эта проблема является одной из основных в Pentium 4). Отмечу, что вероятность правильного предсказания у современных процессоров достигает 97%.
В современных процессорах оправдано использование еще одного ноу-хау - так называемого динамического исполнения. Суть его заключается в исполнении инструкций не в той последовательности, какая предполагается кодом программы, а так, как это "выгодно" процессору с точки зрения производительности. Это позволяет, например, в том случае, когда для выполнения следующей команды необходим результат предыдущей, не ждать выполнения последней, а приступить к выполнению той инструкции, данные к которой уже известны. Результаты такого "беспорядочного" выполнения сохраняются в специальном буфере и впоследствии в корректном порядке восстанавливаются в памяти. Динамическое исполнение позволяет в значительной степени уменьшить простаивание конвейеров.
Сергей ШИРКО,
[email protected]
Горячие темы