Реклама:

Еще одна особенность IA-64, повышающая быстродействие, - поддержка спекулятивной загрузки. Если команда LOAD спекулятивна и не срабатывает, то вместо того, чтобы вызвать исключение, она просто прекращает выполняться и сообщает, что регистр, в который она должна была загрузить значение, недействителен. Для этого используется тот самый бит отравления, о котором мы упоминали в главе 4. А исключение будет вызвано только в том случае, если затем попытаться использовать этот регистр.

Обычно при спекулятивной загрузке компилятор помещает команды LOAD перед другими командами. Поскольку выполнение этих команд начинается раньше, чем нужно, они могут завершиться еще до того, как потребуются результаты. В том месте, где ему нужно получить значение определенного регистра, компилятор вставляет команду CHECK. Если значение там уже есть, команда CHECK работает так же, как NOP, и выполнение программы просто сразу продолжается дальше. Если значения в регистре еще нет, следующая команда вынуждена простаивать.

Суммируя, можно сказать, что в машинах с архитектурой IA-64 реализовано несколько механизмов повышения быстродействия. Во-первых, это современная конвейеризированная трехадресная RISC-машина, поддерживающая механизм загрузки/сохранения. Во-вторых, компилятор определяет, какие команды могут выполняться одновременно, и, не вступая в конфликт, группирует эти команды в пучки. Таким образом, процессор может просто планировать обработку пучков, не думая ни о каких проверках. В-третьих, предикация позволяет объединить команды обоих переходов в операторе i f, устраняя при этом как условный переход, так и необходимость прогнозирования этого перехода. Наконец, спекулятивная загрузка позволяет вызывать операнды заранее, и даже если позднее окажется, что эти операнды не нужны, ничего страшного не произойдет.

Дополнительные сведения о процессоре Itanium 2 и его микроархитектуре можно почерпнуть в дополнительной литературе [144, 178].

Сокращение числа условных переходов - предикация || Оглавление || Краткое содержание главы5