Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Архитектура компьютера - Таненбаун Э.

Таненбаун Э. Архитектура компьютера — Спб.: Питер, 2007. — 844 c.
ISBN 5-469-01274-3
Скачать (прямая ссылка): arhkomputera2007.DjVu
Предыдущая << 1 .. 227 228 229 230 231 232 < 233 > 234 235 236 237 238 239 .. 422 >> Следующая

центральный процессор стал бы гораздо проще и работал бы гораздо быстрее.
На первый взгляд может показаться, что устранить условные переходы
невозможно, поскольку в программах всегда полно операторов if. Однако в
архитектуре IA-64 используется специальная технология, названная
предикацией (predication), которая позволяет сильно сократить их число
[14, 98]. Кратко опишем эту технологию.
В нынешних машинах все команды являются безусловными в том смысле, что
когда центральный процессор встречает команду, он просто ее выполняет.
Здесь никогда не решается вопрос: "Выполнять или не выполнять?" И
напротив, в предикатной архитектуре команды содержат условия, которые
сообщают, в каком случае нужно выполнять команду, а в каком - нет. Именно
этот переход от безусловных команд к предикатным позволяет избавиться от
многих условных переходов. Вместо того чтобы выбирать ту или иную
последовательность безусловных команд, все команды сливаются в одну
последовательность предикатных команд, в которой у разных команд разные
предикаты.
Чтобы понять, как работает предикация, рассмотрим простой пример
(листинги 5.9-5.11), в котором показано условное выполнение команд
(условное выполнение - предтеча предикации). В листинге 5.9 мы видим
оператор if. В листинге 5.10 после его трансляции получилось три команды:
сравнения, условного перехода и перемещения. В листинге 5.11 мы
избавились от условного перехода, используя новую команду CM0VZ, которая
является командой условного перемещения. Эта команда проверяет, равен ли
третий регистр R1 нулю. Если да, то команда копирует R3 в R2. Если нет,
то команда не выполняет никаких действий.
Листинг 5.9. Оператор if
if (R1-0)
R2 = R3;
Листинг 5.10. Код на ассемблере для листинга 5.9
CMP R1.0 BNE L1 MOV R2, R3 L1:
Листинг 5.11. Условная команда
CMOVZ R2.R3.R1
Если у нас есть команда, которая может копировать данные, когда какой-
либо регистр равен нулю, значит, у нас может быть и такая команда,
которая копирует данные, если какой-нибудь регистр не равен нулю. Пусть
это будет команда CM0VN. При наличии обеих команд мы уже на пути к
полному условному выполнению. Представим оператор i f с несколькими
операторами присваивания в части then и несколькими операторами
присваивания в части el se. Весь этот фраг-
Архитектура IA-64 и процессор Itanium 2
467
мент программы можно транслировать в код, который будет устанавливать
какой-нибудь регистр на 0, если условие не выполнено, и на какое-нибудь
другое значение, если условие выполнено. Таким образом, присваивания в
части then можно скомпилировать в последовательность команд CM0VN, а
присваивания в части el se - в последовательность команд CM0VZ.
Все эти команды, в том числе команды установки регистров, CN0VN и CM0VZ,
формируют единый основной блок без условных переходов. Команды можно даже
переупорядочить при компиляции или во время выполнения программы.
Единственное требование состоит в том, чтобы условие было известно к тому
моменту, когда условные команды потребуется помещать в выходные регистры
(то есть где-то в конце конвейера). Простой пример фрагмента программы с
операторами then и else приведен в листингах 5.12-5.14.
Листинг 5.12, Оператор if
if(Rl == 0) {
R2 = R3;
R4 = R5;
} else {
R6 = R7;
R8 - R9;
}
Листинг 5.13. Код на ассемблере для листинга 5.12
CMP R1.0 BNE L1 MOV R2.R3 MOV R4.R5 BR L2 LI: MOV R6.R7
MOV R8.R9
L2:
Листинг 5.14. Условное выполнение
CMOVZ R2.R3.R1 CMOVZ R4.R5.R1 CMOVN R6.R7.R1 CMOVN R8.R9.R1
Мы показали только очень простые условные команды (взятые из архитектуры
команд Pentium 4), но в архитектуре IA-64 все команды предикатные. Это
значит, что выполнение каждой команды можно сделать условным.
Дополнительное 6-разрядное поле предикатного регистра, о котором мы
упомянули, позволяет выбрать один из 64 1-разрядных предикатных
регистров. Следовательно, оператор If может быть скомпилирован в код,
который устанавливает один из предикатных регистров в 1, если условие
истинно, и в 0, если условие ложно. Одновременно и автоматически
инвертируется другой предикатный регистр. Таким образом, при поддержке
предикации машинные команды, которые формируются из операторов then и el
se, сливаются в единый поток команд, причем у команд первого из них поле
предикатного регистра оказывается единичным, у второго - нулевым.
В листингах 5.15-5.17 показано, как использовать предикацию для
устранения переходов. Команда CMPEQ сравнивает два регистра и
устанавливает предикатный регистр Р4 в 1, если они равны, и в 0, если они
не равны. Кроме того, команда инвертирует еще один регистр, например, Р5.
После этого команды частей
468
Глава 5. Уровень архитектуры набора команд
if и then можно поместить одну за другой, причем каждая из них
оказывается связанной с каким-нибудь предикатным регистром (регистр
указывается в угловых скобках). Сюда можно поместить любой код, при
условии, что каждая команда предсказывается правильно.
Предыдущая << 1 .. 227 228 229 230 231 232 < 233 > 234 235 236 237 238 239 .. 422 >> Следующая