Скачать презентацию Архитектура процессора Intel Pentium 4 n n n Скачать презентацию Архитектура процессора Intel Pentium 4 n n n

Intel Pentium 4.ppt

  • Количество слайдов: 74

Архитектура процессора Intel Pentium 4 n n n n n Введение Определение понятия “архитектура” Архитектура процессора Intel Pentium 4 n n n n n Введение Определение понятия “архитектура” Архитектуры CISC и RISC Как работают современные процессоры Наиболее важные сравнительные характеристики процессоров корпорации Intel трех последних поколений Особенности архитектуры Pentium 4 Форматы данных и команды их обработки процессора Intel Pentium 4 Выполнение простейшей операции Заключение Горшенин А. Ю Егоров А. А Москаленко А. С ©

Введение Будучи выпущенным в 1995 году, процессор Intel Pentium Pro стал первым CPU с Введение Будучи выпущенным в 1995 году, процессор Intel Pentium Pro стал первым CPU с архитектурой P 6. С тех пор прошло уже достаточно много времени, сменилось несколько поколений процессоров, однако, по сути архитектура не менялась. Семейства Pentium II, Pentium III и Celeron имеют все то же строение ядра, отличаясь по сути только размером и организацией кеша второго уровня и наличием набора команд SSE, появившегося в Pentium III. Естественно, рано или поздно архитектура P 6 должна была устареть. И дело тут вовсе не в невозможности дальнейшего наращивания тактовых частот и даже не в обострившейся в последнее время конкуренцией с AMD. Конечно, нельзя отрицать тот факт, что достигнув частоты в 1 ГГц Intel столкнулся с проблемами в дальнейшем наращивании частоты своих процессоров: Pentium III 1. 13 ГГц даже пришлось отзывать в связи с его нестабильностью. Однако, эту проблему легко можно решить переходом на 0. 13 мкм процесс. Настоящая причина необходимости новой архитектуры кроется глубже. К сожалению, дальнейшее наращивание частоты существующих процессоров приводит все к меньшему росту их производительности. Проблема в том, что латентности, то есть задержки, возникающие при обращении к тем или иным узлам процессора, по нынешним меркам в P 6 уже слишком велики. Именно это явилось основной причиной, по которой Intel затеял разработку Pentium 4, которая выполнена с чистого листа. Таким образом, анонсированный сегодня Pentium 4 - совершенно новый процессор, ничего общего не имеющий со своими предшественниками. В его основе лежит архитектура, названная Intel Net. Burst architecture. Этим названием Intel хотел подчеркнуть, что основная цель нового процессора – ускорить выполнение задач потоковой обработки данных, напрямую связанных с бурно развивающимся Internet. В данной работе мы подробно рассмотрим новейшие технологии и преимущества новой архитектуры Pentium 4. Так же подробно опишем вес арифметические и логические команды используемые в этом процессоре. Попробуем разобраться как работает современный процессор.

Определение понятия Определение понятия "архитектура" Термин "архитектура системы" часто употребляется как в узком, так и в широком смысле этого слова. В узком смысле под архитектурой понимается архитектура набора команд. Архитектура набора команд служит границей между аппаратурой и программным обеспечением и представляет ту часть системы, которая видна программисту или разработчику компиляторов. Следует отметить, что это наиболее частое употребление этого термина. В широком смысле архитектура охватывает понятие организации системы, включающее такие высокоуровневые аспекты разработки компьютера как систему памяти, структуру системной шины, организацию ввода/вывода и т. п. Применительно к вычислительным системам термин "архитектура" может быть определен как распределение функций, реализуемых системой, между ее уровнями, точнее как определение границ между этими уровнями. Таким образом, архитектура вычислительной системы предполагает многоуровневую организацию. Архитектура первого уровня определяет, какие функции по обработке данных выполняются системой в целом, а какие возлагаются на внешний мир (пользователей, операторов, администраторов баз данных и т. д. ). Система взаимодействует с внешним миром через набор интерфейсов: языки (язык оператора, языки программирования, языки описания и манипулирования базой данных, язык управления заданиями) и системные программы (программы-утилиты, программы редактирования, сортировки, сохранения и восстановления информации). Интерфейсы следующих уровней могут разграничивать определенные уровни внутри программного обеспечения. Например, уровень управления логическими ресурсами может включать реализацию таких функций, как управление базой данных, файлами, виртуальной памятью, сетевой телеобработкой. К уровню управления физическими ресурсами относятся функции управления внешней и оперативной памятью, управления процессами, выполняющимися в системе. Следующий уровень отражает основную линию разграничения системы, а именно границу между системным программным обеспечением и аппаратурой. Эту идею можно развить и дальше и говорить о распределении функций между отдельными частями физической системы. Например, некоторый интерфейс определяет, какие функции реализуют центральные процессоры, а какие - процессоры ввода/вывода. Архитектура следующего уровня определяет разграничение функций между процессорами ввода/вывода и контроллерами внешних устройств. В свою очередь можно разграничить функции, реализуемые контроллерами и самими устройствами ввода/вывода (терминалами, модемами, накопителями на магнитных дисках и лентах). Архитектура таких уровней часто называется архитектурой физического ввода/вывода.

Архитектуры CISC и RISC Здесь рассматриваются базовые свойства архитектур CISC и RISC, а также Архитектуры CISC и RISC Здесь рассматриваются базовые свойства архитектур CISC и RISC, а также особенности интеграции элементов RISC-архитектуры в процессорах x 86. Особое внимание уделяется описанию преимуществ и недостатков этой интеграции. Показано естественность взаимообогащения CISC и RISC-процессоров эффективными аппаратно-программными решениями, а также практичность развития процессоров в этом направлении. Организация первых моделей процессоров - i 8086/8088 - была направлена, в частности, на сокращение объёма программ, критичного для систем того времени, отличавшихся малой оперативной памятью. Расширение спектра операций, реализуемых системой команд, позволило уменьшить размер программ, а также трудоёмкость их написания и отладки. Однако увеличение числа команд повысило трудоёмкость разработки их топологических и микропрограммных реализаций. Последнее проявилось в удлинении сроков разработки CISC-процессоров, а также в проявлении различных ошибок в их работе. Кроме того, нерегулярность потока команд ограничила развитие топологии временным параллелизмом обработки инструкций на конвейере "выборка команды- дешифрация команды- выборка данных- вычисление- запись результата". Эти недостатки обусловили необходимость разработки альтернативной архитектуры, нацеленной, прежде всего, на снижение нерегулярности потока команд уменьшением их общего количества. Это было реализовано в RISC-процессорах, название которых означает "чипы с сокращённой системой команд" (Reduced Instruction Set Computer). Одновременно "классические" процессоры получили обозначение CISC (Complex Instruction Set Computer) - компьютер со сложным набором инструкций. Сокращение нерегулярности потока команд позволило обогатить топологию RISC-процессоров пространственным параллелизмом, специализированными аппаратными АЛУ (ALU - блок логики и арифметики = Arithmetic (and) Logic Unit), независимыми кэш данных и команд, раздельными шинами ввода-вывода. Последние, в частности, увеличили длину конвейеров команд. Всё это повысило и производительность - увеличением числа операций, выполняемых за один такт, и быстродействие - сокращением пути транзактов - RISC-процессоров. При этом срок разработки данных чипов свидетельствует о том, что её трудоёмкость меньше, чем в случае CISCпроцессоров. На мировых рынках CISC-процессоры представлены, в основном, клонами процессоров Intel серии x 86, производимыми AMD, Cyrix, а RISC - чипами Alpha, Power. PC, SPARC. Уступая во многом последним, процессоры x 86 сохранили лидерство на рынке персональных систем лишь благодаря совместимости с программным обеспечением младших моделей, общая стоимость которого - в начале 90 -х годов - составила несколько миллиардов долларов США. В свою очередь, достоинства RISC-процессоров укрепили их позиции на более молодом рынке высокопроизводительных машин.

Архитектуры CISC и RISC Несмотря на формальное разделение Архитектуры CISC и RISC Несмотря на формальное разделение "сфер влияния", между представителями этих архитектур в начале 90 -х годов началась острая конкуренция за превентивное улучшение характеристик. В первую очередь, производительности и её отношения к трудоёмкости разработки процессоров. Следуя принципу "бить врага его оружием", создатели и CISC, и RISC-процессоров нередко боролись с конкурентами, заимствуя их удачные решения. Первыми на то решились разработчики Intel, реализовавшие в i 486 пространственный параллелизм вычислений с фиксированной и плавающей запятой. Поддержка каждого АЛУ своей шиной данных/команд и регистровым блоком повысила производительность i 486 одновременным выполнением указанных команд. Кроме того, интеграция кэш и очереди команд позволила поднять частоту ядра процессора в 2 -3 раза в сравнении с системной шиной. Однако совместное размещение данных и команд ограничило эффективность кэш необходимостью его полной перезагрузки после выполнения команд переходов. Для устранения недостатка в Pentium реализованы раздельные кэш для команд и данных, позволяющие после переходов перезагружать лишь команды - такое решение называется Гарвардской архитектурой, а также предсказание переходов, снижающее частоту перезагрузок. Последнее достигается предварительной загрузкой в кэш команд с обоих разветвлений. Введение второго целочисленного тракта, состоящего из АЛУ, адресного блока, шин данных/команд, и работающего на общий блок регистров, повысило производительность поддержкой параллельной обработки целочисленных данных. Развитием данной тенденции стало обогащение Pentium MMX мультимедийным трактом, образованным АЛУ, шинами данных/команд и регистровым файлом. При этом в случае выборки двух целочисленных команд, зависящих по данным, каждая из них выполняется последовательно, что снижает эффективность работы процессора. Частично поправило ситуацию создание оптимизирующих рекомпиляторов, например, Pen_Opt фирмы Intel, разделяющих по возможности такие команды. Реализация описанного управления обработкой команд CISC-формата вызвала дополнительный рост трудоёмкости разработки Pentium в сравнении с i 8086/i 486, что привело не только к увеличению её реального срока на 27% в сравнении с ожидаемым, но и к проявлению ошибок в первых моделях данного процессора. Учтя это, компания Intel реализовала в Pentium Pro RISC-подобную организацию вычислений. Интерпретация команд х86 внутренними - RISC 86 - инструкциями VLIW-формата помимо снижения нерегулярности их потока, обеспечила синхронную загрузку четырёх операционных - по два с плавающей и фиксированной запятой - АЛУ этого чипа. Термин VLIW расшифровывается как "очень длинное командное слово" (Very Long Instruction Word). Инструкции этого формата содержат команды для всех параллельных АЛУ.

Архитектуры CISC и RISC Обогащение управления обработкой предвыборкой данных и команд, предполагаемых к обработке Архитектуры CISC и RISC Обогащение управления обработкой предвыборкой данных и команд, предполагаемых к обработке в ближайшие 20 тактов, повысило регулярность загрузки вычислительных трактов. В свою очередь, осуществление предвыборки из интегрированного на кристалле кэш второго уровня, обслуживаемого раздельными шинами "интерфейс-кэш" и "кэш-АЛУ" и работающего на частоте АЛУ, повысило быстродействие подготовки команд в сравнении с внешними кэш. Дополнительное повышение производительности Pentium Pro обеспечило увеличение длины команд до 11 ступеней введением ступеней трансляции и предвыборки. Кроме того, интеграция кэш второго уровня позволила умножать частоту ядра в 5 -6 раз. В архитектуре Р 6 RISC-решения впервые в семействе х86 перестали быть лишь дополнением исконных CISC-средств повышения производительности - роста разрядности, отложенной записи шины и других. Поэтому частица PRO в названии первого процессора этой серии обозначает "Полноценная RISC-архитектура" (Precision RISC Organization). Топологические новинки Pentium II - интеграция тракта MMX, мультипроцессорный интерфейс Xeon, вынесение кэш второго уровня на кристалл в корпусе чипа, как и полное устранение кэш второго уровня в Celeron, не имеют в данном случае качественной роли и направлены на оптимизацию отношения характеристик этих процессоров, к их цене. При этом сокращение нерегулярности потока RISC 86 -инструкицй ограничило рост требований к развитию управления вычислениями в сравнении с Pentium. Одновременно снижение трудоёмкости разработки аппаратно-программных реализаций алгоритмов работы Pentium Pro, достигнутое развитием САПР, ослабило влияние развития обработки данных, оцениваемого ростом объёма информации, заложенной в реализациях этой обработки, на общую трудоёмкость разработки процессоров, оцениваемую её длительностью. Последнее создало возможность оптимизации соотношения характеристик чипов и их трудоёмкости не снижением последней ограничением внедрения прогрессивных решений в CISC-архитектуру или ограничением функциональных возможностей RISC-процессоров, а ростом характеристик, достигаемым сочетанием преимуществ упомянутых архитектур. Сказанное иллюстрирует и организация современных RISC-процессоров. Их отличает, в данном случае, развитие систем команд с целью сохранения иерархической совместимости и снижения трудоёмкости разработки программ. Это сближает технологии обработки команд процессорами упомянутых архитектур. Например, Super. Sparc взяли от последних моделей х86 предсказание переходов и предварительную интерпретацию кода. Таким образом, развиваясь, каждая из рассмотренных архитектур, "отказавшись" от своих черт - CISC от скалярности вычислений, RISC от "простоты" системы команд, приобрела лучшие черты конкурента, что повысило характеристики её представителей.

Архитектуры CISC и RISC Это подтверждает и процессор Merced, разрабатываемый недавними противниками - Intel Архитектуры CISC и RISC Это подтверждает и процессор Merced, разрабатываемый недавними противниками - Intel и Hewlett Packard. Имеющиеся сведения позволяют предположить, что его архитектура продолжит тенденции Pentium Pro по оптимизации обработки внутренних VLIW-подобных команд реализацией эффективных архитектурных решений при одновременной оптимизации преобразования "внешних" инструкций. Особо отмечаются намерения создания двух вариантов этого чипа, различающихся лишь множеством этих инструкций. Первый будет совместим с CISC-семейством x 86, второй - с RISC-процессорами Alpha. Будучи "един в двух лицах", Merced ознаменует прекращение соперничества CISC и RISC, в ходе которого представители данных архитектура улучшили свои характеристики реализацией лучших аппаратнопрограммных решений конкурентов. Это позволяет предположить, что дальнейшее развитие массовых процессоров пройдёт по пути развития топологических и микропрограммных решений вычислительного ядра RISC-организации при одновременном повышении возможностей CISC-подобной "внешней" системы команд.

Как работают современные процессоры Для начала -- небольшая, но совершенно необходимая теоретическая часть. Во-первых, Как работают современные процессоры Для начала -- небольшая, но совершенно необходимая теоретическая часть. Во-первых, все современные CPU используют конвейерную (pipelined) архитектуру в различных ее вариантах. Это означает, что любая команда выполняется не одним, а несколькими блоками, объединенными в конвейер. Первым процессором, в котором было применено такое решение, стал Intel 486, он имел конвейер из пяти ступеней. Однако это еще не все. Дело в том, что внутри любой современный CPU уже давно "наполовину RISC", т. е. фактически он исполняет совсем другие команды, а не те, что поступают к нему из ОЗУ. Эра процессоров, "напрямую" выполнявших команды x 86 -ассемблера, закончилась еще с приходом Intel Pentium Pro/II и AMD K 5/K 6. Все последующие CPU сначала осуществляют преобразование довольно "емких" x 86 -команд в более простой RISC-подобный код (как правило, при этом одна команда преобразуется в несколько), исполнением которого и занимается непосредственно ядро процессора. Такой, на первый взгляд, сложный путь был избран потому, что ядро, исполняющее простые команды, гораздо легче "переносит" высокие частоты работы. В общем, спор между низкочастотным сложным ядром и высокочастотным простым уже давно и однозначно решен в пользу последнего. При этом появляется еще одна возможность увеличения скорости исполнения команд -- параллелизация обработки. То есть несколько RISC-подобных команд обрабатываются параллельно -- за один такт, но на разных участках конвейера. Ну и кроме того, начиная с Intel Pentium, архитектура современных CPU стала "суперскалярной" (superpipelined), это означает, что конвейеров в них несколько и работают они параллельно

Наиболее важные сравнительные характеристики процессоров корпорации Intel трех последних поколений Pentium III Pentium 4 Наиболее важные сравнительные характеристики процессоров корпорации Intel трех последних поколений Pentium III Pentium 4 Число транзисторов 7. 5 млн. 9. 5 млн. 42 млн. Тактовая частота 0. 45 ГГц 1 ГГц от 1. 3 ГГц и выше Тип исполнения Динамический Net. Burst Кэш L 2 Отдельный На кристалле Системная шина 100 МГц 133 МГц 400/533/667 МГц Технология MMX Есть Потоковые расширения SSE Нет Есть Потоковые расширения SSE 2 Нет Есть Характеристика

Особенности архитектуры n n n n n Архитектура Net. Burst Hyper Pipelined Technology n Особенности архитектуры n n n n n Архитектура Net. Burst Hyper Pipelined Technology n Принцип работы n Описание ступеней конвейера Advanced Dynamic Execution Trace Cache Rapid Execute Engine SSE 2 L 1 кэш L 2 Advanced Transfer Cache Процессор

Архитектура Net. Burst Первым делом, попробуем разобраться с особенностями новой архитектуры. Архитектура Net. Burst Архитектура Net. Burst Первым делом, попробуем разобраться с особенностями новой архитектуры. Архитектура Net. Burst имеет в своей основе несколько инноваций, в комплексе и позволяющих добиться конечной цели – гарантировать запас быстродействия и будущую наращиваемость для процессоров семейства Pentium 4. В число основных технологий входят: Hyper Pipelined Technology. Конвейер Pentium 4 имеет беспрецедентно большую глубину – 20 стадий. Advanced Dynamic Execution. Улучшенное предсказание переходов и исполнение команд с изменением порядка их следования (out of order execution). Trace Cache. Для кэширования декодированных инструкций в Pentium 4 используется специальный кэш. Rapid Execute Engine. ALU процессора Pentium 4 работает на вдвое большей, чем сам процессор, частоте. SSE 2. Расширенный набор инструкций для обработки потоковых данных. 400/533/667 MHz System Bus. Новая системная шина. Рассмотрим все нововведения по порядку.

Hyper Pipelined Technology (Гипер конвейерная технология) Названием Hyper Pipelined Technology конвейер Pentium 4 обязан Hyper Pipelined Technology (Гипер конвейерная технология) Названием Hyper Pipelined Technology конвейер Pentium 4 обязан своей длине – 20 стадий. Для сравнения – длина конвейера Pentium III составляет 10 стадий. Чего же достиг Intel, так удлинив конвейер? Благодаря декомпозиции выполнения каждой команды на более мелкие этапы, каждый из этих этапов теперь может выполняться быстрее, что позволяет беспрепятственно увеличивать частоту процессора. Так, если при используемом сегодня технологическом процессе 0. 18 мкм предельная частота для Pentium III составляет 1 ГГц (ну или, по более оптимистичным оценкам, 1. 13 ГГц), Pentium 4 сможет достигнуть частоты 2 ГГц. А при 0. 13 !!! Однако, у чрезмерно длинного конвейера есть и свои недостатки. Первый недостаток очевиден – каждая команда теперь, проходя большее число стадий, выполняется дольше. Поэтому, чтобы младшие модели Pentium 4 превосходили по производительности старшие модели Pentium III, частоты Pentium 4 начинаются с 1. 4 ГГц. Если бы Intel выпустил бы Pentium 4 1 ГГц, то этот процессор несомненно бы проиграл в производительности гигагерцовому Pentium III. Второй недостаток длинного конвейера вскрывается при ошибках в предсказании переходов. Как и любой современный процессор, Pentium 4 может выполнять инструкции не только последовательно, но и параллельно, соответственно не всегда в том порядке, как они следуют в программе и не всегда доподлинно зная направления условных переходов. Для того, чтобы выбирать в таких случаях ветви программы для дальнейшего выполнения, процессор прогнозирует результаты выполнения условных переходов на основании накопленной статистики. Однако, иногда блок предсказания переходов все же ошибается, и в этом случае приходится полностью очищать конвейер, сводя на нет всю предварительно проделанную процессором работу по выполнению не той ветви в программе. Естественно, при более длинном конвейере, его очистка обходится дороже в том смысле, что на новое заполнение конвейера уходит больше процессорных тактов, а следовательно и времени. Ниже приведен рисунок длины конвейеров различных поколений процессоров Intel

Принцип работы конвейера В в этом разделе мы внимательно рассмотрим принцип работы нового конвейера Принцип работы конвейера В в этом разделе мы внимательно рассмотрим принцип работы нового конвейера Pentium 4 реализован другой подход нежели в процессорах других фирм. На ступени выполнения там используется меньшее количество функциональных устройств. Но каждое из них обладает более длинным и более быстрым конвейером. Это означает, что каждое функциональное устройство имеет большее количество доступных для выполнения тактов (execution slots) и таким образом способно одновременно выполнять довольно много инструкций. Так, скажем, вместо трёх устройств для выполнения операций с плавающей точкой, работающих медленно, но параллельно, Pentium 4 имеет только одно такое устройство, которое может быстрее одновременно выполнять большее количество инструкций на различных ступенях. Важно отметить, что для того, чтобы полностью загружать быстрые конвейерные функциональные устройства в Pentium 4, препроцессор должен обладать большим буфером, способным вмещать в себя и планировать огромное количество инструкций. Процессор Pentium 4 может одновременно выполнять на различных ступенях до 126 инструкций. Отсюда следует, что для внеочередного выполнения процессор должен анализировать значительно большее количество инструкций на взаимозависимость, а затем преобразовывать их для быстрой передачи функциональным устройствам. Так работает конвейер Pentium 4

Принцип работы конвейера Для лучшего понимания сути вопроса можно обратиться к аналогии в индустрии Принцип работы конвейера Для лучшего понимания сути вопроса можно обратиться к аналогии в индустрии фастфуд. В Мак. Дональдс вы можете либо прийти пешком, либо приехать. В первом случае, вы увидите шесть коротеньких очередей. Вы можете встать в любую, и подождать своей очереди, чтобы вас обслуживал один человек. Во втором случае, вы попадёте в одну большую очередь. Но очередь будет обслуживаться быстрее, так как там работает несколько человек. Первому вы сделаете заказ, а у второго вы этот заказ заберёте. Так как процесс обслуживания разбивается на несколько этапов, то большее количество посетителей смогут получить еду в одной большой очереди. Так вот, Pentium 4 использует второй вариант.

Ступени конвейера Pentium 4 n n n Ступени 1, 2: Trace Cache Next Instruction Ступени конвейера Pentium 4 n n n Ступени 1, 2: Trace Cache Next Instruction Pointer. Ступени 3, 4: Trace Cache Fetch. Ступень 5: Drive. Ступени 6, 7, 8: Allocate and Rename. Ступень 9: Queue. Ступени 10, 11, 12: Schedule. Ступени 13, 14: Dispatch. Ступени 15, 16: Register Files. Ступень 17: Execute. Ступень 18: Flags. Ступень 19: Branch Check. Ступень 20: Drive.

Ступени 1, 2 Отслеживающий кэш получает указатель на следующие инструкции. На этих ступенях в Ступени 1, 2 Отслеживающий кэш получает указатель на следующие инструкции. На этих ступенях в логику кэшпамяти передаётся указатель на следующую инструкцию в отслеживающем кэше.

Ступени 3, 4 На этих двух ступенях происходит выборка инструкций из кэш-памяти. Затем эти Ступени 3, 4 На этих двух ступенях происходит выборка инструкций из кэш-памяти. Затем эти инструкции будут отосланы на внеочередное выполнение.

Ступень 5 Это первая из двух передаточных ступеней конвейера. Каждая из них предназначена для Ступень 5 Это первая из двух передаточных ступеней конвейера. Каждая из них предназначена для передачи сигналов из одной части процессора в следующую. Процессор работает настолько быстро, что иногда сигналы не могут пройти весь путь за один тактовый импульс, поэтому в Pentium® 4 выделено две ступени конвейера для передачи сигнала по чипу. Раньше эта ступень в конвейерах не встречалось. Intel® впервые внедрила эту ступень в конвейерную технологию. Без такого рода ступеней невозможно достичь высоких частот.

Ступени 6, 7, 8 n n На этих ступенях происходит распределение микроархитектурных ресурсов регистров. Ступени 6, 7, 8 n n На этих ступенях происходит распределение микроархитектурных ресурсов регистров. С помощью переименования регистров можно добиться бесконфликтного существования большего количества регистров в микроархитектуре, чем это определено архитектурой набора команд (ISA -Instruction Set Achitecture). Эти дополнительные регистры как раз распределяются и используются на этой стадии. В Pentium® 4 таких дополнительных регистров 128. Ступени распределения / переименования могут выпустить три микрокоманды за такт на следующую ступень конвейера.

Ступени 10, 11, 12 На этих ступенях инструкции поступают из устройства распределения (Allocator) в Ступени 10, 11, 12 На этих ступенях инструкции поступают из устройства распределения (Allocator) в одну из четырех n n очередей распределения. Далее цитата Intel®, которая подытожит функции этой ступени: "Распределитель микрокоманд (Scheduler) следит за входными регистровыми операндами (Register Operands) микрокоманд и определяет, какую из микрокоманд уже можно выполнять. Это суть внеочередного выполнения команд. Распределитель микрокоманд позволяет посылать на ступень выполнения микрокоманды как только они будут готовы (изменяя нормальных порядок) и при этом поддерживает нормальный ход программы. Микроархитектура Net. Burst™ использует два устройства, с помощью которых происходит распределение микрокоманд: сам распределитель, и очередь микрокоманд". Ниже представлены четыре распределителя: Memory Scheduler - распределитель памяти, распределяет операции по работе с памятью для устройств Load / Store Unit (LSU); Fast ALU Scheduler - быстрый распределитель арифметико-логического устройства, распределяет арифметикологические операции (простые целочисленные и логические операции), чтобы послать их потом на два ALU, работающие на двойной скорости; Slow ALU / General FPU Scheduler - медленный распределитель ALU / распределитель операций с плавающей точкой, распределяет остальные операции ALU и операции с плавающей точкой; Simple FP Scheduler, распределитель простых операций с плавающей точкой - распределяет простые операции с плавающей точкой и операции по доступу к памяти с плавающей точкой.

Ступень 9 Между ступенями распределения / переименования и распределяющей логикой существуют две очереди. Это Ступень 9 Между ступенями распределения / переименования и распределяющей логикой существуют две очереди. Это очередь микрокоманд памяти и очередь арифметических микрокоманд. Именно в эти очереди и распределяются микрокоманды перед тем, как попасть на один из четырёх портов диспетчера, работающего в качестве шлюза к функциональным устройствам стадии выполнения.

Ступени 13, 14 На этих ступенях инструкции попадают на один из четырёх портов диспетчеризации Ступени 13, 14 На этих ступенях инструкции попадают на один из четырёх портов диспетчеризации (Dispatch Ports), а затем на выполнение. Эти порты выполняют функцию шлюзов к функциональным устройствам. За один такт через эти порты может пройти до шести микрокоманд. Это больше, чем может выполнить препроцессор (3 микрокоманды за такт), и больше, чем может сбросить постпроцессор (Тоже 3 микрокоманды за такт), что дает некоторую свободу в случае вспышки активности. На рис. ниже представлены четыре порта диспетчеризации и типы инструкций, которые они мо-гут принять. Если указать на диаграмме распределители, то они были бы размещены над четырьмя портами.

Ступени 15, 16 После того, как инструкции пройдут порты диспетчеризации, они попадают на две Ступени 15, 16 После того, как инструкции пройдут порты диспетчеризации, они попадают на две эти ступени. Здесь инструкции загружаются в блок регистров для дальнейшего выполнения.

Ступень 17 На этой ступени инструкции выполняются в функциональных устройствах. Вообще говоря, это и Ступень 17 На этой ступени инструкции выполняются в функциональных устройствах. Вообще говоря, это и есть самая главная стадия, ради которой и приходится проделывать весь этот длинный путь. Если это инструкция ADD, то цифры складываются, если это LOAD, то в память загружаются какие-то данные, если это MUL, то цифры перемножаются, и т. д.

Ступень 18 Если результат выполнения инструкции требует изменения состоянии флагов, именно на этой ступени Ступень 18 Если результат выполнения инструкции требует изменения состоянии флагов, именно на этой ступени и выполняется эта операция.

Ступень 19 На этой ступени Pentium 4 проверяет выполнение условия ветвления и определяет, напрасно Ступень 19 На этой ступени Pentium 4 проверяет выполнение условия ветвления и определяет, напрасно были затрачены 19 тактов, или все-таки нет. Т. е. препроцессор узнает, сбылось ли предсказание ветвления.

Ступень 20 Вторая передаточная ступень выполняет те же функции распространения сигнала по чипу, что Ступень 20 Вторая передаточная ступень выполняет те же функции распространения сигнала по чипу, что и первая. 20 -ступенчатый конвейер Pentium® 4 выполняет ту же работу и в том же порядке, что и конвейеры других процессоров. Однако, разбиение конвейера на большее число ступеней позволяет Pentium® 4 достичь больших тактовых частот.

Advanced Dynamic Execution (Улучшенное предсказание переходов и исполнение команд с изменением порядка их следования) Advanced Dynamic Execution (Улучшенное предсказание переходов и исполнение команд с изменением порядка их следования) Целью ряда ухищрений в архитектуре Pentium 4, под общим названием Advanced Dynamic Execution, как раз и является минимизация простоя процессора при неправильном предсказании переходов и увеличение вероятности правильных предсказаний. Для этого Intel улучшил блок выборки инструкций для внеочередного выполнения и повысил правильность предсказания переходов. Правда, для этого алгоритмы предсказания переходов были доработаны минимально, основным же средством для достижения цели было выбрано увеличение размеров буферов, с которыми работают соответствующие блоки процессора. Так, для выборки следующей инструкции для исполнения используется теперь окно величиной в 126 команд против 42 команд у процессора Pentium III. Буфер же, в котором сохраняются адреса выполненных переходов и на основании которого процессор предсказывает будущие переходы, теперь увеличен до 4 Кбайт, в то время как у Pentium III его размер составлял всего 512 байт. Результатом этого, а также благодаря небольшой доработке алгоритма, вероятность правильного предсказания переходов была улучшена по сравнению с Pentium III на 33%. Это – очень хороший показатель, поскольку теперь Pentium 4 предсказывает переходы правильно в 90 -95% случаев.

Trace Cache (Кэш с отслеживаниями ) Trace Cache (Кэш с отслеживаниями )

Rapid Execute Engine (Быстрый движок выполнения команд) Наиболее простая часть современного процессора – это Rapid Execute Engine (Быстрый движок выполнения команд) Наиболее простая часть современного процессора – это ALU (арифметико-логическое устройство). Благодаря этому факту, Intel счел возможным увеличить его тактовую частоту внутри Pentium 4 вдвое по отношению к самому процессору. Таким образом, например, в 1. 4 ГГц Pentium 4 ALU работает на частоте 2. 8 ГГц. В ALU исполняются простые целочисленные инструкции, поэтому, производительность нового процессора при операциях с целыми числами должна быть очень высокой. Однако, на производительности Pentium 4 при операциях с вещественными числами, MMX или SSE двукратное ускорение ALU никак не сказывается. Таким образом, латентность ALU существенно снижается. В частности, на выполнение одной инструкции типа add Pentium 4 1. 4 ГГц тратит всего 0. 35 нс, в то время как выполнение этой команды у Pentium III 1 ГГц занимает 1 нс.

SSE 2 Реализовав в своем процессоре Athlon новый конвейерный FPU, AMD очень сильно обогнала SSE 2 Реализовав в своем процессоре Athlon новый конвейерный FPU, AMD очень сильно обогнала интеловский Pentium III в производительности при операциях с вещественными числами. Однако, Intel в своем Pentium 4 не стал сосредотачиваться на совершенствовании своего FPU, а просто увеличил возможности блока SSE. В результате, в Pentium 4 имеет место расширенный набор команд SSE 2, в котором к имеющемуся набору из 70 инструкций было добавлено еще 144. Такое решение – результат Net. Burst идеологии, основной целью которой является увеличение скорости работы с потоками данных.

SSE 2 Таким образом, SSE 2 гораздо более гибок, позволяя добиваться впечатляющего прироста в SSE 2 Таким образом, SSE 2 гораздо более гибок, позволяя добиваться впечатляющего прироста в производительности. Однако, использование нового набора команд требует специальной оптимизации программ, поэтому ждать его внедрения сразу после выхода нового процессора не стоит. Со временем же, SSE 2 имеет достаточно большие перспективы. Поэтому, даже AMD собирается реализовать SSE 2 в своем новом семействе процессоров Hammer. Старые же программы, не использующие SSE 2, а полагающиеся на обычный арифметический сопроцессор, никакого прироста в производительности при использовании Pentium 4 не получат. Более того, несмотря на то, что Intel говорит о том, что блок FPU в Pentium 4 был слегка усовершенствован, время, необходимое на выполнение обычных операций с вещественными числами возросло по сравнению с Pentium III в среднем на 2 такта.

L 1 кэш Что касается кеша первого уровня в Pentium 4, то поскольку теперь L 1 кэш Что касается кеша первого уровня в Pentium 4, то поскольку теперь команды хранятся в Trace Cache, он предназначен только для хранения данных. Однако, его размер в Pentium 4, основанном на ядре Willamette составляет всего 8 Кбайт. Это выглядит достаточно небольшой цифрой даже на фоне 16 -килобайтной области данных в L 1 кэше Pentium III. Однако, Intel был вынужден сократить объем кеша первого уровня в Pentium 4, так как ядро этого процессора и без того получалось слишком большим. Тем не менее, архитектура этого процессора может поддерживать L 1 -кеш и большего размера, поэтому, скорее всего, при переходе на технологический процесс 0. 13 мкм и новое ядро Northwood, этот кэш будет увеличен. Однако, для увеличения производительности, Intel применил для доступа к L 1 -кешу новый алгоритм, чем уменьшил в Pentium 4 латентность этого кеша до двух процессорных тактов вместо трех тактов в Pentium III. Таким образом, учитывая большую тактовую частоту Pentium 4, время реакции его L 1 кеша составляет всего 1. 4 нс для 1. 4 ГГц модели против 3 нс у L 1 кеша Pentium III 1 ГГц. Также как и в Pentium III, L 1 кэш Pentium 4 является write through и ассоциативным с 4 областями ассоциативности. При этом длина одной строки L 1 кеша равна 64 байтам.

L 2 Advanced Transfer Cache Процессор Pentium 4 обладает Advanced Transfer Cache второго уровня L 2 Advanced Transfer Cache Процессор Pentium 4 обладает Advanced Transfer Cache второго уровня объемом 256 -512 Кбайт. Также, как и в Pentium III, L 2 -кеш имеет широкую 256 -битную шину, благодаря которой процессоры от Intel имеют более высокую пропускную способность кеша, чем их конкуренты от AMD, использующие 64 -битную шину кеша. Однако, в отличие от Athlon, в Pentium 4 (впрочем, также как и в Pentium III) L 2 кэш не является эксклюзивным, то есть он дублирует данные, находящиеся в L 1 кэше. Так как Pentium 4 рассчитан на обработку потоковых данных, скорость работы L 2 -кеша для него является одним из ключевых моментов. Поэтому, Intel увеличил пропускную способность кеша второго уровня в Pentium 4 в два раза. Это усовершенствование было сделано благодаря передаче данных из L 2 -кеша на каждый процессорный такт, в то время, как данные из L 2 -кеша Pentium III передаются только на каждый второй такт. Таким образом, пропускная способность L 2 -кеша Pentium 4, работающего, например, с частотой 1. 4 ГГц имеет теперь внушительную величину 44. 8 Гбайт/с. Для сравнения – пропускная способность Advanced Transfer Cache у Pentium III 1 ГГц составляет 16 Гбайт/с. Также как и в Pentium III, L 2 кэш имеет восемь областей ассоциативности и строки длиной 128 байт. Однако, в отличие от Pentium III, каждая строка может быть изъята не целиком, а по 64 -байтовым половинкам. Говоря о системе кэширования в Pentium 4, нельзя обойти стороной и тот факт, что архитектура Net. Burst поддерживает и кэш третьего уровня размером до 4 Мбайт. Однако, в Pentium 4 пока эта возможность использоваться не будет. Она зарезервирована для будущего применения в серверных процессорах.

Процессор n n n n Итак, после краткого знакомства с основными деталями Net. Burst Процессор n n n n Итак, после краткого знакомства с основными деталями Net. Burst архитектуры, основного оружия Pentium 4 взглянем на его формальную спецификацию: Чип, производимый технологии по 0. 18 -0. 13 с мкм использованием алюминиевых соединений. Переход на медные соединения Intel планирует произвести одновременно с внедрением технологии 0. 13 мкм. архитектуре Net. Burst. Содержит 42 млн. транзисторов и имеет площадь 217 кв. мм. Это более чем в два раза больше, чем площадь ядра Athlon или Pentium III. Работает в специальных материнских платах с 478 контактным процессорным разъемом Socket 478. Использует высокопроизводительную 400/533/667 МГц Quad Pumped системную шину Кеш данных первого Кбайт. Cache уровня Trace 8 для декодированных инструкций рассчитан на 12000 микроопераций второго уровня размером 256 -512 Кбайт. Работает на полной частоте ядра и имеет 256 -битную шину Напряжение питания - 1. 7 В Набор SIMD-инструкций SSE 2

Форматы данных и команды их обработки процессора Intel Pentium 4 n n n Типы Форматы данных и команды их обработки процессора Intel Pentium 4 n n n Типы данных процессора Pentium 4 Рис. 1. Типы данных Рис. 2. Типы данных, обрабатываемых блоками FPU/MMX и ХММ Математический сопроцессор x 87 Технология MMX Расширение SSE и SSE 2 — блок XMM Команды обработки данных n Инструкции пересылки данных n Инструкции двоичной арифметики n Инструкции десятичной арифметики n Инструкции логических операций n Инструкции сдвигов n Инструкции обработки бит и байт n Инструкции строковых операций n Инструкции FPU n Инструкции ММХ n Инструкции расширения SSE 2

Типы данных процессора Pentium 4 История 32 -разрядных процессоров Intel началась с процессора Intel Типы данных процессора Pentium 4 История 32 -разрядных процессоров Intel началась с процессора Intel 386. Он вобрал в себя все черты своих 16 - n n n разрядных предшественников 8086/88 и 80286 для обеспечения совместимости с громадным объемом программного обеспечения, существовавшего на момент его появления. Процессоры могут оперировать с 8 -, 16 - и 32 -битными операндами, строками байт, слов и двойных слов, а также с битами, битовыми полями и строками бит. Рассматриваемые процессоры непосредственно поддерживают (используют в качестве операндов) знаковые и беззнаковые целые числа, строки байт, цифр и символов, битовые строки, указатели и числа с плавающей точкой. В семействе х86 принято, что слова записываются в двух смежных байтах памяти, начиная с младшего. Адресом слова является адрес его младшего байта. Двойные слова записываются в четырех смежных байтах, опять-таки начиная с младшего байта, адрес которого и является адресом двойного слова. Этот порядок называется Little-Endian Memory Format. В других семействах процессоров применяют и обратный порядок — Big-Endian Memory Format, в котором адресом слова (двойного слова) является адрес его старшего байта, а младшие байты располагаются в последующих адресах. Для взаимного преобразования форматов слова имеется инструкция XCHG, двойного слова — BSWAP (процессор 486 и выше). Типы данных: Бит (Bit) — единица информации. Бит в памяти задается базой (адресом слова) и смещением (номером бита в слове). Битовое поле (Bit Field) — группа до 32 смежных бит, располагающихся не более чем в 4 байтах. Битовая строка (Bit String) — набор смежных бит длиной до 4 Гбит. Байт (Byte) — 8 бит. Числа без знака: байт/слово/двойное/учетверенное слово (Unsigned Byte/ Word/Double Word/Quade Word), 8/16/32/64 бит. Целые числа со знаком: байт/слово/двойное/учетверенное слово (Integer Byte/ Word/Double Word/Quade Word). Единичное значение самого старшего бита (знак) является признаком отрицательного числа, которое хранится в дополнительном коде.

Типы данных процессора Pentium 4 n n n n n Двоично-десятичные числа (BCD — Типы данных процессора Pentium 4 n n n n n Двоично-десятичные числа (BCD — Binary Coded Decimal): 8 -разрядные упакованные (Packed BCD), содержащие два десятичных разряда в одном байте; 8 -разрядные неупакованные (Unpacked BCD), содержащие один десятичный разряд в байте (значение бит 7: 4 при сложении и вычитании несущественно, при умножении и делении они должны быть нулевыми). Строки байт, слов и двойных слов (Bit String, Byte String, Word String, Double Word String) длиной до 4 Гбайт. Указатели: длинный указатель (48 бит) — 16 -битный селектор (или сегмент) и 32 -битное смещение; короткий указатель — 32 -битное смещение; просто указатель (32 бит, единственный тип указателя для 8086 и 80286) • 16 -битный селектор (или сегмент) и 16 битное смещение. 16 -разрядные процессоры из приведенных типов данных не поддерживают учетверенные слова всех типов, битовые поля и строки, строки двойных слов, короткие и длинные указатели. Числа в формате с плавающей точкой и упакованные 80 -битные BCD-числа обрабатываются блоками FPU процессоров класса 486 и выше, а также сопроцессорами 8087/287/387. Упакованные 64 -битные и 128 -битные данные обрабатываются процессорами с ММХ и SSE. Форматы данных, обрабатываемых блоками FPU/MMX и ХММ Действительные числа в формате с плавающей точкой: n n n одинарной точности (Single Precision), 32 бит — 23 бит мантисса, 8 бит порядок; двойной точности (Double Precision), 64 бит — 52 бит мантисса, 11 бит порядок; повышенной точности (Extended Precision), 80 бит — 64 бит мантисса, 15 бит порядок. Двоично-десятичные 80 -битные упакованные числа (18 десятичных разрядов и знак). Упакованные действительные числа одинарной точности в формате с плавающей точкой, обрабатываются блоком ХММ. Упакованные целые числа, знаковые и беззнаковые, обрабатываются блоком ММХ:

Типы данных процессора Pentium 4 n n упакованные байты (Packed byte) — восемь байт; Типы данных процессора Pentium 4 n n упакованные байты (Packed byte) — восемь байт; упакованные слова (Packed word) — четыре слова; упакованные двойные слова (Packed doubleword) — два двойных слова; учетверенное слово (Quadword) — одно слово. Для 16 -разрядных процессоров, естественно, все форматы чисел для блоков ММХ и ХММ недоступны. Рассмотрим более подробно блоки, упомянутые выше: блоки FPU, MMX, XMM, которые архитектуре процессоров IA-32 х86 держатся особняком. Они присутствуют не но всех процессорах и даже по схемотехнической реализации являются пристройками к центральному процессору с его набором обычных целочисленных регистров. Данные блоки предназначены для ускорения вычислений. Математический сопроцессор (FPU) позволяет использовать несколько форматов чисел с плавающей точкой — FP-форматов. Операции с такими числами можно выполнять и программно средствами целочисленного процессора, но сопроцессор выполняет эти операции аппаратно во много раз быстрее. Блок ММХ дает ускорение целочисленных вычислений за счет одновременной обработки одной инструкцией целого пакета чисел (пар чисел). Блок ХММ комбинирует эти два приема — обрабатывает одной инструкцией пакет из четырех чисел в FP-формате. Исторически первым появился сопроцессор. Блок ММХ ради совместимости с операционными системами "спрятали" в то же оборудование, что и сопроцессор. Так появился комбинированный блок, называемый блоком FP/MMX, или FPU/ММХ. И только блок ХММ, используемый расширением SSE в процессоров Pentium 3, стал полностью новым самостоятельным набором регистров. При отсутствии математического сопроцессора прикладная программа все-таки может использовать инструкции FPU, но для этого операционная система должна поддерживать эмуляцию сопроцессора. Эмулятор сопроцессора — это программа-обработчик прерывания от сопроцессора или исключения #NM, которая должна "выловить" код операции, сопроцессора, определить местонахождение данных и выполнить требуемые вычисления, используя целочисленную арифметику центрального процессора. Понятно, что эмуляция будет выполняться во много раз медленнее, чем те же действия, выполняемые настоящим сопроцессором. Тем не менее эмуляция позволяет все-таки пользоваться прикладными программами, требующими вычислений с плавающей точкой. Для этого в регистре CR 0 должно быть установлено сочетание флагов ЕМ = 1, МР = 0. Для эмуляции в IBM PC обычно устанавливают значение NE = 0. Тогда каждая инструкция FPU автоматически будет вызывать эмулятор генерацией запроса прерывания (а не исключения #NM, как было бы при NE = 1). Эмуляция для блоков ММХ и ХММ не предусматривается — эти блоки предназначены для ускорения вычислений в приложениях реального времени, и выполнять их с крайне низкой скоростью эмуляции было бы просто бессмысленно. Если установлен флаг эмуляции ЕМ = 1, то любая инструкция ММХ вызовет исключение #UD.

Типы данных процессора Pentium 4 Рис. 1. Типы данных, обрабатываемых целочисленным АЛУ Типы данных процессора Pentium 4 Рис. 1. Типы данных, обрабатываемых целочисленным АЛУ

Типы данных процессора Pentium 4 Рис. 2. Типы данных, обрабатываемых блоками FPU/MMX и ХММ Типы данных процессора Pentium 4 Рис. 2. Типы данных, обрабатываемых блоками FPU/MMX и ХММ

Математический сопроцессор x 87 Математический сопроцессор предназначен для расширения вычислительных возможностей центрального процессора — Математический сопроцессор x 87 Математический сопроцессор предназначен для расширения вычислительных возможностей центрального процессора — выполнения арифметических операций, вычисления основных математических функции (тригонометрических, экспоненты, логарифма) и т. д. В разных поколениях процессоров он назывался по-разному — FPU (Floating Point Unit — блок чисел с плавающей точкой) или NPX (Numeric Processor e. Xtension — числовое расширение процессора). Сопроцессор поддерживает семь типов данных: 16 -, 32 -, 64 -битные целые числа; 32 -, 64 -, 80 -битные числа с плавающей точкой и 18 -разрядные числа в двоично-десятичном формате. Формат чисел с плавающей точкой соответствует стандартам IEEE 754 и 854. Применение сопроцессора повышает производительность вычислений в сотни раз. С программной точки зрения сопроцессор и процессор выглядят как единое целое. В современных (486+) процессорах FPU располагается на одном кристалле с центральным процессором. Для процессоров 386 и ниже сопроцессор был отдельной микросхемой, подключаемой к локальной нише основного процессора. В любом случае сопроцессор исполняет только свои специфические команды, а всю работу по декодированию инструкции и доставке данных осуществляет CPU. Сопроцессор может выполнять вычисления параллельно с центральным процессором, независимо от переключения задач в защищенном режиме. Как и основной процессор, сопроцессор может работать в реальном или защищенном режиме и переключать разрядность- 16 или 32. Переключение режимов влияет на формат отображения регистров сопроцессора в оперативной памяти, при этом формат используемых внутренних регистров не изменяется. Форматы данных FPU Сопроцессор оперирует данными в формате с плавающей точкой, который позволяет представлять существенно больше действительных чисел, чем целочисленное АЛУ центрального процессора. Арифметические операции (здесь под арифметическими понимаются операции, изменяющие значения операндов, а также операции сравнения) в FPU выполняются над 80 -битными числами, во внутреннем формате расширенной точности (рисунки ниже). Формат позволяет представлять следующие категории чисел:

Математический сопроцессор x 87 n n Числа представляются в аффинном пространстве. Это означает, что Математический сопроцессор x 87 n n Числа представляются в аффинном пространстве. Это означает, что меньше любого конечного числа, а больше любого конечного числа. Бит Sign определяет знак числа: 0 — положительное, 1 — отрицательное число. Поле Exponent хранит смещенное значение двоичного порядка числа (biased exponent). Смещение позволяет все значения порядков допустимого диапазона чисел представлять положительным числом, при этом значению 000. . . 000 соответствуют минимальные (по модулю) числа, значению 111. . . 110 — максимальные допустимые числа, а значению 111. . . 111 — бесконечно большие числа. Нуль может быть положительным или отрицательным, в зависимости от бита знака, при этом и мантисса, и порядок у него нулевые. Мантисса (Signficand) нормализованного числа, отличного от нуля, всегда имеет вид "1, ххх. . ххх", то есть представляет величину, не меньшую единицы. У бесконечностей (тоже положительной и отрицательной) мантисса нулевая. Денормализованные числа имеют нулевой порядок (смещенное значение) и мантиссу вида "0, ххх. . . ххх" (отличную от нуля). Денормализованные числа — это слишком малые величины, которые представляются и обрабатываются с точностью меньшей, чем позволяет разрядность регистров сопроцессора. Кроме вещественных чисел (конечных нормализованных и денормализованных, нулей и бесконечностей) регистры сопроцессора могут содержать не числа Na. N (Not a Number) четырех видов. -SNa. N и +SNa. N — порядок 111. . . 111, мантисса 1, 0 ххх. . . ххх (ненулевая). Эти "сигнализирующие" не числа (signaling Na. N) вызывают исключения сопроцессора, если с ними пытаются выполнять арифметические действия. -QNa. N и +QNa. N — порядок 111. . . 111, мантисса 1, 1 ххх. . . ххх (ненулевая). Эти "тихие" не числа (quiet Na. N) не вызывают исключений при арифметических операциях. Внешние операнды могут быть представлены в одном из форматов, приведенных на рис. 2. Характеристики форматов чисел, поддерживаемых сопроцессором, приведены в таблице. При их загрузке в FPU и сохранении результатов преобразования форматов во внутренний и обратно выполняются автоматически. Во внешних представлениях вещественных чисел целая часть мантиссы всегда подразумевается равной единице. В расширенном формате целая часть задается явно (бит 63), она имеет нулевое значение только при представлении нулей и денормализованных чисел. Смещение порядка составляет 127 для одиночного, 1023 для двойного и 16 383 для расширенного вещественного форматов. Форматы вещественных чисел представляют только множество дискретных значений множества чисел, расположенных на непрерывной бесконечной числовой оси.

Математический сопроцессор x 87 Диапазон и плотность значений зависят от выбранного формата представления. Заметим, Математический сопроцессор x 87 Диапазон и плотность значений зависят от выбранного формата представления. Заметим, что не все десятичные дроби могут быть представлены точно в двоичном коде. Так, например, дробь 1/10 не имеет точного двоичного представления (аналогично тому, что 1/3 = 0, 33333(3)). Сопроцессор контролирует числа, участвующие в арифметических операциях. При загрузке денормализованного операнда в регистр FPU и попытке выполнения арифметических инструкций хотя бы с одним денормализованным операндом сопроцессор фиксирует условие исключения #D. Денормализованные числа могут появляться при выполнении вычислений, в этом случае сопроцессор фиксирует факт исчезновения значащих разрядов и генерирует исключение #U. При попытке выполнения арифметических операций с нечислами, а также с недопустимыми значениями операндов (например, извлечение квадратного корня из отрицательного числа) вырабатывается исключение #I. При переполнении вырабатывается исключение #O, при попытке деления на нуль ненулевого операнда вырабатывается исключение #Z. Если результат вычисления невозможно представить точно в выбранном формате, сопроцессор выполняет округление результата в сторону соседнего допустимого значения. Правила округления программируются. Вместо автоматического выполнения округления сопроцессор может вырабатывать исключение #Р.

Технология MMX n n Технология ММХ ориентирована на приложения мультимедиа, 2 D/3 D-графикy и Технология MMX n n Технология ММХ ориентирована на приложения мультимедиа, 2 D/3 D-графикy и коммуникации. Это расширение базовой архитектуры появилось только после выхода второго поколения процессоров Pentium. Основная идея ММХ заключается в одновременной обработке нескольких элементов данных за одну инструкцию — так называемая технология SIMD (Single Instruction — Multiple Data). Расширение ММХ использует новые типы упакованных 64 -битных целочисленных данных: упакованные байты (Packed byte) — восемь байт; упакованные слова (Packed word) — четыре слова; упакованные двойные слова (Packed doubleword) — два двойных слова; учетверенное слово (Quadword) — одно слово. Эти типы данных могут специальным образом обрабатываться в 64 -битных регистрах ММХ 0 -ММХ 7, представляющих собой младшие биты стека 80 -битных регистров FPU. Каждая инструкция ММХ выполняет действие сразу над всем комплектом операндов (8, 4, 2 или 1), размещенных в адресуемых регистрах. Как и регистры FPU, эти регистры ММХ не могут использоваться для адресации памяти. Совпадение регистров ММХ и FPU накладывает ограничения на чередование кодов FPU и ММХ — забота об этом лежит на программисте приложений с ММХ. Еще одна особенность технологии ММХ — поддержка арифметики с насыщением (saturating arithmetic). Ее отличие от обычной арифметики с циклическим переполнением (wraparound mode) заключается в том, что при возникновении переполнения в результате фиксируется максимально возможное значение для данного типа данных, а перенос игнорируется. В случае переполнения снизу в результате фиксируется минимально возможное значение. Граничные значения определяются типом (знаковый или беззнаковый) и разрядностью переменных. Такой режим вычислений удобен, например, для определения цветов. В систему команд введено 57 дополнительных инструкций для одновременной обработки нескольких единиц данных. Одновременно обрабатываемое 64 -битное слово может содержать как одну единицу обработки, так и 8 однобайтных, 4 двухбайтных или 2 четырехбайтных операнда. Новые инструкции включают следующие группы:

Технология MMX n n n n арифметические (Arithmetic Instructions), куда входят сложение и вычитание Технология MMX n n n n арифметические (Arithmetic Instructions), куда входят сложение и вычитание в разных режимах, умножение и комбинация умножения и сложения; сравнение (Comparison Instructions) элементов данных на равенство или по величине; преобразование форматов (Conversion Instructions); логические инструкции (Logical Instructions) — И, И-НЕ, ИЛИ и исключающее ИЛИ, выполняемые над 64 -битными операндами; сдвиги (Shift Instructions) — логические и арифметические; пересылки данных (Data Transfer Instructions) между регистрами ММХ и целочисленными регистрами или памятью; очистка ММХ (Empty ММХ State) — установка признаков пустых регистров в слове тегов. Инструкции ММХ не влияют на флаги условий в слове состояния FPU. Регистры ММХ в отличие от регистров FPU адресуются физически, а не относительно значения указателя стека ТОР. Более того, любая инструкция ММХ обнуляет поле ТОР регистра состояния FPU. В слове тегов свободному регистру соответствует комбинация 11, остальные комбинации указывают только на занятость регистра. После каждой операции ММХ биты тегов регистра назначения обнуляются. Неиспользуемые в ММХ биты [79: 64] регистров FPU заполняются единицами, так что ошибочная обработка данных ММХ инструкцией FPU приведет к исключению. Инструкции ММХ не порождают новых исключений. Исключения при выполнении инструкций ММХ могут возникать только в случае нарушения границ в обращениях к памяти (как при обмене данными, так и при выборке инструкции). Однако если предшествующая инструкция FPU породила условие исключения, то оно произойдет при выполнении инструкции ММХ. После его обработки инструкция ММХ может исполнена. С инструкциями ММХ могут применяться префиксы замены сегмента и изменения разрядности адреса (влияют на инструкции, обращающиеся к памяти). Использование префиксов изменения разрядности операнда и повторов зарезервировано (может привести к непредсказуемым результатам). Префикс Lock вызывает исключение #UD. Инструкции ММХ доступны из любого режима процессора. При переключении задач необходимо следить за корректностью сохранения контекста, как и при работе с FPU.

Технология MMX Любая инструкция ММХ вызывает обнуление полей тегов всех регистров FPU/ММХ, что для Технология MMX Любая инструкция ММХ вызывает обнуление полей тегов всех регистров FPU/ММХ, что для FPU означает наличие действительных данных во всех регистрах. Последующая инструкция для FPU над "неправильными" данными может привести к непредсказуемому результату, поскольку "входной контроль" данных осуществляется по состоянию тегов. Чтобы застраховаться от подобных неприятностей, после инструкций ММХ и перед инструкциями FPU в программный код вводят инструкцию EMMS, которая устанавливает в слове тегов значение FFFFh (все регистры пустые). Различие в способе адресации регистров (относительная для FPU и явная прямая в ММХ), обнуление тегов инструкциями ММХ и некоторые другие нюансы не позволяют чередовать инструкции FPU и ММХ. Блок FPU/MMX может работать либо в одном, либо в другом режиме. Если, к примеру, в цепочку инструкций FPU нужно вклинить инструкции ММХ, после чего продолжить вычисления FPU, то перед первой инструкцией ММХ приходится сохранять контекст (состояние регистров) FPU в памяти, а после этих инструкций снова загружать контекст. На эти сохранения и загрузки расходуется процессорное время, в результате возможна полная потеря выигрыша от реализации технологии SIMD. Совпадение регистров ММХ и FPU оправдывают тем, что для сохранения контекста ММХ при переключении задач не требуется доработок в операционной системе — контекст ММХ сохраняется тем же способом, что и FPU, с которым умели работать издавна. Таким образом, операционным системам было все равно, какой процессор установлен — с ММХ или без. Но для того чтобы реализовать преимущества SIMD, приложения должны "уметь" ими пользоваться (и не проиграть на переключениях). Частое чередование кодов FPU и ММХ может снизить производительность за счет необходимости сохранения и восстановления весьма объемного контекста FPU.

Расширение SSE 2 — блок XMM n n Процессоры Pentium 3 имеют так называемое Расширение SSE 2 — блок XMM n n Процессоры Pentium 3 имеют так называемое потоковое расширение SSE (Streaming SIMD Extensions). В те времена, когда будущий Pentium III называли еще Kathmai, фирма Intel объявила о новых инструкциях KNI (Kathmai New Instruction), так что SSE — это синоним "староинтеловского" KNI. Новые процессоры имеют дополнительный независимый блок из восьми 128 -битных регистров, названных ХММ 0. . . ХММ 7 (очевидно, e. Xtended Multi. Media), и регистр состояния/управления MXCSR. В каждый из регистров ХММ помещаются четыре 32 -битных числа в формате с плавающей точкой одинарной точности. Блок позволяет выполнять векторные (они же пакетные) и скалярные инструкции. Векторные инструкции реализуют операции сразу над четырьмя комплектами операндов. Скалярные инструкции работают с одним комплектом операндов — младшим 32 -битным словом. При выполнении инструкций с ХММ традиционное оборудование FPU/MMX не используется, что позволяет эффективно смешивать инструкции ММХ с инструкциями над операндами с плавающей точкой. Здесь блоки процессора меняются ролями — регистры ММХ, наложенные на регистры традиционного сопроцессора, используются для целочисленных потоковых вычислений, а вычисления с плавающей точкой (правда, только с одинарной точностью, но для мультимедийпых приложений ее хватает) возлагаются на новый блок ХММ. Кроме инструкций с новым блоком ХММ в расширение SSE входят и дополнительные целочисленные инструкции с регистрами ММХ, а также инструкции управления кэшированием. Новые инструкции с регистрами ММХ, как и их предшественники из "классического" ММХ, не допускают чередования с инструкциями FPU без переключения контекста FPU/MMX. С инструкциями SSE могут использоваться префиксы замены сегмента и изменения разрядности адреса (влияют на инструкции, обращающиеся к памяти). Использование префиксов изменения разрядности операнда зарезервировано (может привести к непредсказуемым результатам). Префикс Lock вызывает исключение #UD. Из префиксов повтора можно использовать только безусловный (REP) и только для "потоковых" инструкций (с ХММ), Остальные применения префиксов повтора могут привести к непредсказуемым результатам. В процессоре Pentium 4 набор инструкций получил очередное расширение — SSE 2, в основном касающееся добавления новых типов 128 -битных операндов для блока ХММ: упакованная пара вещественных чисел двойной точности; упакованные целые числа: 16 байт, 8 слов, 4 двойных слова или пара учетверенных (по 64 бита) слов. В процессор введены новые функции целочисленной арифметики SIMD, 128 -разрядные для регистров ХММ и такие же 64 -разрядные для регистров ММХ; ряд старых инструкций ММХ распространили и на ХММ (в 128 -битном варианте); добавлены инструкции преобразований для новых форматов данных, а также расширены возможности "перемешивания" данных в блоке ХММ. Кроме того, расширена поддержка управления кэшированием и порядком исполнения операций с памятью. Инструкции SSE 2 предназначены для ЗD-графики, кодирования/декодирования видео, а также шифрования данных.

Команды обработки данных Система команд 32 -разрядных процессоров является существенно расширенной системой команд процессоров Команды обработки данных Система команд 32 -разрядных процессоров является существенно расширенной системой команд процессоров 8086/80286. Расширения касаются увеличения разрядности адресов и операндов, более гибкой системы адресации, появления принципиально новых типов данных (битовые строки и поля) и команд. Команды (инструкции) содержат одно- или двухбайтный код инструкции, за которым может следовать несколько байт, определяющих режим исполнения команды, и операнды. Команды могут использовать до трех операндов (или ни одного). Операнды могут находиться в памяти, регистрах процессора или непосредственно в команде. Для 32 -разрядных процессоров разрядность слова (word) по умолчанию может составлять 32, а не 16 бит. Это распространяется на многие инструкции, включая и строковые. В реальном режиме и режиме виртуального процессора 8086 по умолчанию используется 16 -битная адресация и 16 -битные операнды-слова. В защищенном режиме режим адресации и разрядность слов по умолчанию определяются дескриптором кодового сегмента. Перед любой инструкцией может быть указан префикс переключения разрядности адреса или слова. При адресации памяти использование сегментного регистра, предусмотренного командой, в ряде инструкций может подавляться префиксом изменения сегмента (Segment Override). В системе команд насчитывается несколько сотен инструкций, поэтому в данной работе обзорно рассмотрены все команды обработки данных (блоков процессора АЛУ, FPU, MMX, и XMM), а далее более подробно описаны инструкции, появившиеся в процессорах Pentium 3 (блок XMM — SSE) и Pentium 4 (блок XMM — SSE 2). Инструкции пересылки данных (см. далее) позволяют передавать константы или переменные между регистрами и памятью, а также портами ввода-вывода в различных комбинациях, но в памяти может находиться не более одного операнда. В эту группу отнесены и инструкции преобразования форматов — расширений и перестановки байт. Операции со стеком выполняются словами с разрядностью, определяемой текущим режимом. При помещении в стек слова указатель стека SP уменьшается на число байт слова (2 или 4), при извлечении — увеличивается. "Классические" (8086) инструкции пересылки не влияют на содержимое регистра флагов. Инструкции пересылки по результатам сравнения (CMPXCHG) модифицируют флаг ZF. Новые инструкции условной пересылки (CMOVxx) позволяют сократить число ветвлений в программе.

Инструкции пересылки данных n n n n n Инструкция BSWAP CBW/CWDE CMOVA/CMOVNBE CMOVAE/CMOVNB CMOVB/CMOVNAE Инструкции пересылки данных n n n n n Инструкция BSWAP CBW/CWDE CMOVA/CMOVNBE CMOVAE/CMOVNB CMOVB/CMOVNAE CMOVBE/CMOVNA CMOVC CMOVE/CMOVZ CMOVG/CMOVNLE CMOVGE/CMOVNL CMOVL/CMOVNGE CMOVLE/CMOVNG CMOVNC CMOVNE/CMOVNZ CMOVNO CMOVNP/CMOVPO CMOVNS CMOVO CMOVP/CMOVPE Описание Перестановка байт из порядка младший-старший (L-H) в порядок старший-младший (H-L) (486+) Преобразование байта AL в слово АХ (расширение знака AL в АН: АН заполняется битом AL. 7) или слова АХ в двойное слово ЕАХ Пересылка, если выше "CF ИЛИ ZF)=0) (P 6+) Пересылка, если не ниже (CF=0) (P 6+) Пересылка, если ниже (CF=1) (P 6+) Пересылка, если не выше ((CF ИЛИ ZF)=1) (P 6+) Пересылка, если перенос (CF=1) (P 6+) Пересылка, если равно (ZF=1) (P 6+) Пересылка, если больше (SF=(0 F И ZF)) (P 6+) Пересылка, если больше или равно (SF=0 F) (P 6+) Пересылка, если меньше (ZF 0 F) (P 6+) Пересылка, если меньше или равно (SF 0 F или ZF=0) (P 6+) Пересылка, если нет переноса (CF=0) (P 6+) Пересылка, если не равно (ZF=0) (P 6+) Пересылка, если нет переполнения (0 F=0) (P 6+) Пересылка, если нет паритета (нечетность) (P 6+) Пересылка, если неотрицательно (SF=0) (P 6+) Пересылка, если переполнение (0 F=1) (P 6+) Пересылка, если паритет (четность) (Р 6+)

Инструкции пересылки данных n n n n CMOVS CMPXCHG r/in r CMPXCHG 8 B Инструкции пересылки данных n n n n CMOVS CMPXCHG r/in r CMPXCHG 8 B m 64 CWD/CDQ Пересылка, если отрицательно (SF=1)(P 6+) Обмен по результату сравнения байта, слова или двойного слова (486+) Обмен по результату сравнения учетверенного слова (5+) Преобразование слова АХ в двойное слово DX: AX (расширение знака, DX заполняется битом АХ. 15) или двойного слова ЕАХ в учетверенное EDX: EAX IN Ввод из порта ввода-вывода в AL/(E)AX MOV Пересылка(копирование)данных MOVSX Копирование байта/слова со знаковым расширением до слова/ двойного слова(386+) MOVZX Копирование байта/слова с нулевым расширением до слова/ двойного слова(386+) OUT Вывод в порт из AL/(E)AX POP Извлечение слова данных из стека в регистр или память, (E)SP инкрементируется POPA(POP All) Извлечение данных из стека в регистры Dl, SI, ВР, ВХ, DX, CX, AX (286+) POPAD Извлечение данных из стека в регистры EDI, ESI, ЕВР, ЕВХ, EDX, ЕСХ, ЕАХ (386+) PUSH Помещение слова из регистра или памяти в стек после декремента (E)SP PUSHA (PUSH All) Помещение в стек регистров АХ, CX, DX, BX, SP (исходное значение), ВР, SI, Dl (286+) PUSHAD Помещение в стек регистров ЕАХ, ЕСХ, EDX, ЕВХ, ESP (исходное значение), ЕВР, ESI, EDI (386+) XCHG Обмен данными (взаимный) между регистрами или регистром и памятью Инструкции ввода-вывода позволяют пересылать как одиночный бант или слово между портом и регистром процессора (инструкции IN и OUT), так и блок байт (слов) между портом и группой смежных ячеек памяти (инструкции INSB/INSW и OUTSB/OUTSW с префиксом повтора, см. ниже). Непосредственная адресация порта в команде обеспечивает доступ только к первым 256 адресам портов, косвенная (через регистр DX) — ко всему пространству ввода-вывода (64 Кбайт). Разрядность операнда и адрес должны согласовываться с физическими возможностями и особенностями поведения адресуемого устройства. При работе с памятью такие нюансы во внимание принимать обычно не приходится.

Инструкции двоичной арифметики n n n n Инструкции двоичной арифметики выполняют все арифметические действия Инструкции двоичной арифметики n n n n Инструкции двоичной арифметики выполняют все арифметические действия с байтами, словами и двойными словами, кодирующими знаковые или беззнаковые целые числа. Умножение и деление для 8086 возможны только с аккумулятором, результат для 16 -битных операндов расширяется в регистре DX. Для 286+ возможно двух- и трехадресное умножение с расширенном только в старший байт (два байта для 386+). Инструкции двоичной арифметики Инструкция Описание ADC Сложение двух операндов с учетом переноса от предыдущей операции ADD Сложение двух операндов СМР Сравнение (вычитание без сохранения результата — установка флагов) DEC Декремент (вычитание 1, но не действует на флаг CF) DIV Деление беззнаковое IDIV Деление знаковое IMUL Умножение знаковое INC Инкремент (сложение с 1, но не действует на флаг CF) MUL Беззнаковое умножение NEG Изменение знака операнда SBB Вычитание с заемом SUB Вычитание XADD Обмен содержимым и сложение (486+)

Инструкции десятичной арифметики n n n n Инструкции десятичной арифметики являются дополнением к предыдущим. Инструкции десятичной арифметики n n n n Инструкции десятичной арифметики являются дополнением к предыдущим. Они позволяют оперировать с неупакованными (биты [7: 4] = 0, биты [3: 0] содержат десятичную цифру 0 -9) или упакованными (биты [7: 4] содержат старшую, биты [3: 0] — младшую десятичную цифру 0 -9) двоично-десятичными числами. Арифметические операции над этими числами требуют применения инструкций коррекции форматов. Инструкции десятичной арифметики Инструкция Описание ААА Десятичная коррекция после сложения двух неупакованных чисел AAD Десятичная коррекция перед делением неупакованного двузначного числа ААМ Десятичная коррекция после умножения двух неупакованных чисел AAS Десятичная коррекция после вычитания двух неупакованных чисел DAA Десятичная коррекция AL после сложения двух упакованных чисел DAS Десятичная коррекция AL после вычитания двух упакованных чисел Инструкции AAD и ААМ допускают обобщенный формат вызова, при котором коррекция выполняется но любому модулю (а не только по модулю 10). Инструкции логических операций выполняют все функции булевой алгебры над байтами, словами или двойными словами.

Инструкции логических операций n n n Инструкции логических операций Инструкция Описание AND Логическое И Инструкции логических операций n n n Инструкции логических операций Инструкция Описание AND Логическое И NOT Инверсия (переключение всех бит) OR Логическое ИЛИ XOR Исключающее ИЛИ

Инструкции сдвигов n n n Сдвиги и вращения (циклические сдвиги) выполняются над регистром или Инструкции сдвигов n n n Сдвиги и вращения (циклические сдвиги) выполняются над регистром или операндом в памяти. Число позиций, на которое производится сдвиг, берется непосредственно из операнда или регистра CL по модулю 8 для однобайтного операнда и по модулю 16 или 32 для операнда-слова, в зависимости от разрядности данных (32 только для 386+). Биты, выталкиваемые при сдвигах, попадают во флаг CF. При сдвигах влево и простом сдвиге вправо освобождающиеся биты заполняются нулями (инструкции SAL и SHL — синонимы). При арифметическом сдвиге вправо старший бит (знак) сохраняет свое значение. При циклических сдвигах выталкиваемые биты попадают и во флаг CF, и в освобождающиеся позиции. В сдвигах могут участвовать и два операнда (инструкции SHLD и SHRD). Инструкции сдвигов Инструкция Описание RCL Циклический сдвиг влево через бит переноса RCR Циклический сдвиг вправо через бит переноса ROL Циклический сдвиг влево ROR Циклический сдвиг вправо SAL Сдвиг арифметический влево SAR Сдвиг арифметический (с сохранением старшего бита) вправо SHL Сдвиг влево SHR Сдвиг вправо SHLD Сдвиг влево и вставка данных в освободившиеся позиции (386+) SHRD Сдвиг вправо и вставка данных в освободившиеся позиции (386+)

Инструкции обработки бит и байт n n n n n Инструкции обработки бит и Инструкции обработки бит и байт n n n n n Инструкции обработки бит и байт позволяют проверять (копировать в CF) и устанавливать значение указанного операнда, а также искать установленный бит. Битовые операции выполняются над 16 -или 32 -битным словом памяти или регистром. Инструкции BSF, BSR и ВТ не изменяют значения слова; ВТС, BTR и BTS воздействуют на указанный бит слова. Номер интересующего бита берется из операнда по модулю 16 или 32, в зависимости от разрядности. Операции с байтами обеспечивают условную установку значений 00 h или 01 h. Инструкция тестирования может выполняться над байтом, словом или двойным словом. Инструкции обработки бит и байт Инструкция Описание BSF Сканирование бит (поиск единичного) вперед BSR Сканирование бит назад ВТ Тестирование бита (загрузка в CF) ВТС Тестирование и изменения значения бита BTR Тестирование и сброс бита BTS Тестирование и установка бита SALC Условная (по CF) установка А 1 в FFh или OOh (не документировано, код D 6 h) SETA/ Установка байта в 01 h, если выше ((CF ИЛИ ZF)=0), иначе в 00 h SETNBE SETAE/ Установка байта в 01 h, если не ниже (CF=0), иначе в 00 h SETNB/ SETNC SETB/ Установка байта в 01 h, если ниже (CF=1), иначе в 00 h SETNAE/ SETC SETBE/ Установка байта в 01 h, если не выше (CF ИЛИ ZF)=1, иначе в 00 h SETNA SETE/ Установка байта в 01 h, если равно (ZF=1), иначе в 00 h

Инструкции обработки бит и байт n n n n n n SETZ SETG/ SETNLE Инструкции обработки бит и байт n n n n n n SETZ SETG/ SETNLE SETQE/ SETNL SETL/ SETNGE SETLE/ SETNG SETNE/ SETNZ SETNO SETNS SETO SETPE/ SETPO/ SETNP SETS SETC SETNC TEST Установка байта в 01 h, если больше (SF=(OP И ZF)), иначе в 00 h Установка байта в 01 h, если больше или равно (SF=OF), иначе в 00 h Установка байта в 01 h, если меньше (ZFOF), иначе в 00 h Установка байта в 01 h, если меньше или равно (SF 0 F или ZF=0), иначе в 00 h Установка байта в 01 h, если не равно (ZF=0), иначе в 00 h Установка байта в 01 h, если нет переполнения (0 F=0), иначе в 00 h Установка байта в 01 h, если неотрицательно (SF=0), иначе в 00 h Установка байта в 01 h, если переполнение (0 F=1), иначе в 00 h Установка байта в 01 h, если паритет (четность), иначе в 00 h Установка байта в 01 h, если нет паритета (нечетность), иначе в 00 h Установка байта в 01 h, если отрицательно (SF=1), иначе в 00 h Установка байта в 01 h, если перенос (CF=1), иначе в 00 h Установка байта в 01 h, если нет переноса (CF=0), иначе в 00 h Проверка бит (логическое И без записи результата — установка флагов)

Инструкции строковых операций n n n Строковые операции выполняются с операндами в памяти, адресуемыми Инструкции строковых операций n n n Строковые операции выполняются с операндами в памяти, адресуемыми регистрами DS: SI (DS: ESI) для источника и ES: DI (ES: EDI) для приемника. Операции могут использоваться с префиксами условного или безусловного повтора. После каждой пересылки или сравнения индексные регистры (SI, DI или оба) участвующих операндов автоматически инкрементируются или декрементируются на количество байт, участвующих в операции (1, 2 или 4). Направление модификации определяется флагом DF: DF = 0 -инкремент, DF = 1 — декремент. Строковые инструкции ввода-вывода с префиксами повтора позволяют достигать высоких скоростей обмена с портами при условии полной загрузки процессора. Инструкции строковых операций Инструкция Описание CMPSB, CMPSD, CMPSW Сравнение записью сравнения строк слов байт, с результата в слов двойных или регистр флагов INSB, INSD, INSW Запись байта, слова или двойного слова, введенного из порта, в память(286+) LODSB, LODSD, LODSW Копирование байта, слова или двойного слова из строки в AL/(E)AX MOVSB, MOVSD, MOVSW Копирование байта, слова или двойного слова из одной строки в другую OUTSB, OUTSD, OUTSW Вывод байта, считанного из памяти, в порт (286+) SCASB, SCASD, SCASW Сканирование байт, или строки слов двойных сравнение запись слов — AL/(E)AX с и результата сравнения в регистр флагов STOSB, STOSD, STOSW Запись байта, слова или двойного слова в строку из AL/(E)AX REP Префикс повтора строковых операций до обнуления (Е)СХ, (Е)СХ декрементируется на каждом повторе REPE/REPZ Префикс условного повтора строковых операций — выполнения REP при ZF=1 REPNE/ Префикс условного повтора строковых операций — выполнения REPNZ REP при ZF=0

Инструкции математического сопроцессора (FPU) n n n n n Инструкции математического сопроцессора (FPU) имеют Инструкции математического сопроцессора (FPU) n n n n n Инструкции математического сопроцессора (FPU) имеют свою специфику задания операндов. Переменная st (0) находится на вершине стека сопроцессора, st (i) смещена от вершины на i. Загрузка данных начинается с декремента указателя стека сопроцессора (поле TOP) — перемещения вершины. Если новая вершина не пустая (по полю TAG) или стек исчерпан, вызывается исключение с указанием причины. После загрузки поле TAG устанавливается в соответствии с загруженным числом. При извлечении из стека производится инкремент ТОР, а в поле TAG старой вершины устанавливается признак пустой ячейки. Попытка использования пустого регистра в операциях или для сохранения результатов в памяти вызывает исключение. Инструкции с префиксом F предварительно проверяют флаг исключения ES (они называются ожидающими инструкциями), инструкции с префиксом FN флаг исключения не проверяют (неожидающие инструкции). Ряд инструкций не вызывает исключения в случае, если обнаруживаются операнды не числа (Na. N). Инструкции FPU Инструкция Описание Пересылки данных FBLD Преобразование и помещение (push) числа в упакованном BCD-формате из памяти в стек FBSTP Извлечение из стека и запись в память в упакованном BCD-формате (10 байт, 18 цифр) FCMOVB Пересылка, если ниже (CF=1) (P 6+) FCMOVBE Пересылка, если не выше (CF ИЛИ ZF)=1 (P 6+) FCMOVE Пересылка, если равно (ZF=1) (P 6+) FCMOVNB Пересылка, если не ниже (CF=0) (P 6+) FCMOVNBE Пересылка, если выше ((CF ИЛИ ZF)=0) (P 6+) FCMOVNE Пересылка, если не равно (ZF=0) (P 6+) FCMOVNU Пересылка, если не Na. N (PF=0) (P 6+) FCMOVU Пересылка, если Na. N (unordered) (PF=0) (P 6+) FILD Загрузка (push) целого числа из памяти FIST Запись в память в формате целого числа FISTP Запись в память в формате целого числа с извлечением FLD Загрузка (push) вещественного числа FST Сохранение (копирование) числа в памяти (в вещественном формате) или в регистре стека FSTP Запись числа в память (в вещественном формате) или в регистр стека с извлечением FXCH Обмен значениями вершины стека и регистра

Инструкции математического сопроцессора (FPU) n n n n n n n Загрузка констант FLD Инструкции математического сопроцессора (FPU) n n n n n n n Загрузка констант FLD 1 Загрузка (push)+1, 0 FLDL 2 E Загрузка (push) log 2(e) FLDL 2 T Загрузка (push) log 2( 10) FLDLG 2 Загрузка (push) lg(2) FLDLN 2 Загрузка (push) ln(2) FLDPI Загрузка (push) pi FLDZ Загрузка (push) + 0, 0 Базовая арифметика FABS Нахождение абсолютного значения FADD Сложение вещественных чисел FADDP Сложение вещественных чисел с извлечением FCHS Изменение знака FDIV Деление вещественных чисел FDIVP Деление вещественных чисел с извлечением FDIVR Обратное деление вещественных чисел FDIVRP Обратное деление вещественных чисел с извлечением FIADD Сложение с целым числом FIDIV Деление на целое число FIDIVR Обратное деление целых чисел FIMUL Умножение на целое число FISUB Вычитание целого числа FISUBR Вычитание из целого числа FMUL Умножение вещественных чисел FMULP Умножение вещественных чисел с извлечением FPREM Нахождение частичного остатка FPREM 1 Нахождение частичного остатка в стандарте IEEE (387+)

Инструкции математического сопроцессора (FPU) n n n n n n FRNDINT Округление до ближайшего Инструкции математического сопроцессора (FPU) n n n n n n FRNDINT Округление до ближайшего целого FSCALE Масштабирование — умножение на округленную в сторону нуля степень числа 2 FSQRT Извлечение квадратного корня FSUB Вычитание вещественного числа FSUBP Вычитание вещественных чисел с извлечением FSUBR Обратное вычитание числа FSUBRP Обратное вычитание с извлечением FXTRACT Выделение мантиссы и порядка числа Сравнение данных FCOM Сравнение вещественных чисел (установка флагов сопроцессора) FCOMI Сравнение и соответствующая установка флагов в EFLAGS (ZF, PF, CF) (P 6+) FCOMIP Сравнение и соответствующая установка флагов в EFLAGS (ZF, PF, CF), с извлечением (P 6+) FCOMP Сравнение вещественных чисел с извлечением FCOMPP Сравнение вещественных чисел с двойным извлечением FICOM Сравнение с целочисленным операндом из памяти FICOMP Сравнение с целочисленным операндом из памяти с извлечением FTST Проверка на нуль FUCOM Сравнение без генерации исключения в случае Na. N (387+) FUCOMI Сравнение без генерации исключения в случае Na. N и соответствующая установка флагов в EFLAGS (ZF, PF, CF) (P 6+) FUCOMIP Сравнение без генерации исключения в случае Na. N и соответствующая установка флагов в EFLAGS (ZF, PF, CF) с извлечением (P 6+) FUCOMP Сравнение без генерации исключения в случае Na. N с извлечением (387+)

Инструкции математического сопроцессора (FPU) n n n n n FXAM Анализ числа — установка Инструкции математического сопроцессора (FPU) n n n n n FXAM Анализ числа — установка кода условия в СО, С 2, СЗ Трансцендентные функции Р 2 ХМ 1 Вычисление 2 -1 FCOS Косинус (387+) PPATAN Арктангенс частного с извлечением FPTAN Вычисление тангенса и загрузка (push) в стек +1, 0 FSIN Вычисление синуса (387+) FSINCOS Вычисление синуса и косинуса с помещением (push) в стек (387+) FYL 2 X Вычисление Yxlog 2(X) FYL 2 XP 1 Вычисление Yxlog 2(X+1) Управление сопроцессором FCLEX Сброс флагов исключений с предварительной проверкой ожидающих немаскированных исключений FDECSTP Декремент указателя стека FPU FFREE Освобождение регистра — пометка как свободного FINCSTP Инкремент указателя стека FPU FINIT Инициализация FPU с предварительной проверкой ожидающих исключений FLDCW Загрузка управляющего слова (FPU CW) из памяти FLDENV Загрузка состояния сопроцессора из памяти, сохраненного инструкциями FSTENV/FNSTENV FNCLEX Сброс флагов исключений без проверки ожидающих

Инструкции математического сопроцессора (FPU) n n n FNINIT FNOP FNSAVE Инициализация FPU без проверки Инструкции математического сопроцессора (FPU) n n n FNINIT FNOP FNSAVE Инициализация FPU без проверки ожидающих исключений Пустая операция FPU Сохранение состояния сопроцессора и стека регистров в памяти без проверки ожидающих исключений FNSTCW Сохранение управляющего слова без проверки ожидающих исключений FNSTENV Сохранение состояния сопроцессора (SR, CR, TAGW, FIP и FDP) в памяти без проверки ожидающих исключений FNSTSW Запись слова состояния без проверки ожидающих исключений FRSTOR Загрузка состояния сопроцессора и регистров из памяти FSAVE Сохранение состояния сопроцессора и стека регистров в памяти с предварительной проверкой ожидающих исключений FSTCW Сохранение управляющего слова с предварительной проверкой ожидающих исключений FSTENV Сохранение состояния сопроцессора (SR, CR, TAGW, FIP и FDP) в памяти с предварительной проверкой ожидающих исключений FSTSW Запись слова состояния для последующего переноса кода завершения в регистр флагов с предварительной проверкой ожидающих исключений WAIT/FWAIT Синхронизация — останов CPU до завершения текущей операции FPU, проверка ожидающих исключений FPU

Инструкции ММХ n n n n Инструкции ММХ появились в процессорах Pentium ММХ и Инструкции ММХ n n n n Инструкции ММХ появились в процессорах Pentium ММХ и с тех пор поддерживаются всеми более современными процессорами (Pentium Pro, появившийся раньше, эти инструкции не поддерживает). Они имеют сложную мнемонику, которая включает следующие элементы: префикс Р (Packed), указывающий на обработку упакованных форматов; мнемонику операции (например, ADD, CMP или XOR); суффикс, идентифицирующий тип насыщения: US (Unsigned Saturation) — насыщение беззнаковое, S (Signed saturation) — насыщение знаковое; суффикс, идентифицирующий тип данных: В — упакованные байты, W — упакованные слова, D — упакованные двойные слова, Q -учетверенное слово. Инструкции, у которых типы входных и выходных данных различаются (например, преобразования), имеют два суффикса. Для инструкций пересылки данных операнды источника и назначения могут находиться в памяти (m 32 или m 64), целочисленных регистрах (ir 32) или регистрах ММХ (mm). Для остальных инструкций, кроме вышеперечисленных, операнд-источник может быть и непосредственным, а операнд назначения всегда является регистром ММХ. Для операндов, находящихся в памяти, применимы все существующие режимы адресации. Инструкции ММХ Инструкция Описание EMMS Очистка стека регистров — установка всех единиц в слове тегов Пересылка данных MOVD Пересылка данных в младшие 32 бита регистра ММХ (с заполнением старших бит нулями) или из младших 32 бит регистра ММХ MOVQ Пересылка данных (64 бит) из/в регистр ММХ

Инструкции ММХ n n n n Преобразование форматов PACKSSDW Упаковка со знаковым насыщением четырех Инструкции ММХ n n n n Преобразование форматов PACKSSDW Упаковка со знаковым насыщением четырех двойных слов в четыре слова PACKSSWB Упаковка со знаковым насыщением восьми слов в восемь байт PACKUSWB Упаковка с насыщением восьми знаковых слов в восемь беззнаковых байт PUNPCKHBW Чередование в регистре назначения байт старшей половины операнда-источника с байтами старшей половины операнда назначения PUNPCKHWD Чередование в регистре назначения слов старшей половины операнда-источника со словами старшей половины операнда назначения PUNPCKHDQ Чередование в регистре назначения двойного слова старшей половины операнда-источника с двойным словом старшей половины операнда назначения PUNPCKLBW Чередование в регистре назначения байт младшей половины операнда-источника с байтами младшей половины операнда назначения PUNPCKLWD Чередование в регистре назначения слов младшей половины операнда-источника со словами младшей половины операнда назначения PUNPCKLDQ Чередование в регистре назначения двойного слова младшей половины операнда-источника с двойным словом младшей половины операнда назначения Упакованная арифметика PADDB Сложение упакованных байт (слов или двойных слов) без насыщения PADDW (с циклическим переполнением) PADDD PADDSB Сложение знаковых упакованных байт (слов) с насыщением PADDSW PADDUSB Сложение упакованных беззнаковых байт (слов) с насыщением PADDUSW

Инструкции ММХ n PMADDWD n PMULHW PMULLW n PSUBB n n n n n Инструкции ММХ n PMADDWD n PMULHW PMULLW n PSUBB n n n n n PSUBW PSUBD PSUBSB PSUBUSB Логика PAND PANDN POR PXOR Умножение четырех знаковых слов операнда-источника на четыре знаков слова операнда назначения. Два двойных слова результатов умножения младших слов суммируются и записываются в младшее двойное слово операнда назначения. Два двойных слова результатов умножения старших слов суммируются и записываются в старшее двойное слово операнда назначения Умножение упакованных знаковых слов с сохранением только старших 16 элементов результата Умножение упакованных знаковых или беззнаковых слов с сохранением только младших 16 бит элементов результата Вычитание упакованных байт (слов или двойных слов) без насыщения (с циклическим антипереполнением) Вычитание упакованных знаковых байт (слов) с насыщением PSUBSW Вычитание упакованных беззнаковых байт (слов) с насыщением PSUBUSW Логическое И mm/m 64 и инверсного значения mm Логическое ИЛИ Исключающее ИЛИ

Инструкции ММХ n n Сравнение PCMPEQB PCMPEQD n PCMPEQW n PCMPGTB ультата т n Инструкции ММХ n n Сравнение PCMPEQB PCMPEQD n PCMPEQW n PCMPGTB ультата т n и лемента биты Все PCMPGTD n n n n n Сравнение (на равенство) упакованных байт (слов, двойных слов). Все биты элемента результата будут единичными (True) совпадении соответствующих элементов (байт, слов или двойных слов) операндов и нулевыми (False) при несовпадении Сравнение (по величине) упакованных знаковых байт (слов, двойных слов). назначения больше элемента операнда-источника, и нулевыми (False) в противном случае PCMPGTW Сдвиги и вращения PSLLD, Логический сдвиг влево упакованных слов (двойных, учетверенных) операнда назначения на количество бит, указанных в операнде-источнике, с заполнением младших бит нулями PSLLQ, PSLLW, PSRAD, PSRAW Арифметический сдвиг вправо упакованных двойных (учетверенных) знаковых слов операнда назначения на количество бит, указанных в операнде-источнике, с заполнением младших битами знаковых разрядов PSRLD, PSRLQ, PSRLW количество бит, указанных в операнде- источнике, с заполнением старших бит нулями

Инструкции расширения SSE (SSE 2) Инструкции SSE появились в процессорах Pentium 3. Они делятся Инструкции расширения SSE (SSE 2) Инструкции SSE появились в процессорах Pentium 3. Они делятся на три основные группы: инструкции над числами в блоке ХММ, дополнительные целочисленные SIMD-инструкции (в блоке ММХ) и новые инструкции кэширования. Основное число новых инструкций предназначено для работы с блоком ХММ. Векторные инструкции выполняются сразу над четырьмя парами чисел. Скалярные инструкции выполняются только над числами, расположенными в младших 32 битах операндов. Операнд-источник для инструкций ХММ может быть как регистром ХММ, так и 128 -битной ячейкой памяти. Для многих инструкций требуется, чтобы операнд в памяти был выровнен по границе параграфа. При обработке скалярными инструкциями операнда в памяти пересылка между памятью и регистрами ХММ производится для всего 128 -битного слова, хотя используется только 32 бита. Инструкции SSE 2 появились в процессорах Pentium 4. Большая их часть предназначена для работы с числами с плавающей точкой двойной точности (64 -битные операнды), расположенными в регистрах ХММ, векторными (упакованная пара 64 -битных чисел) и скалярными (старшим или младшим числом). Они обеспечивают векторные и скалярные пересылки этих чисел, арифметические инструкции (сложение, вычитание, умножение, деление, извлечение корня, нахождение максимума и минимума), сравнение чисел, преобразования форматов, перестановки операндов, а также побитные логические функции. Появились и SIMD-инструкции обработки 32 - и 64 -битных целых чисел, расположенных в регистрах ХММ. Новые инструкции управления кэшированием позволяют миновать кэш при записи в память из регистров ХММ и общих регистров, упорядочивать последовательности загрузки данных из памяти и записи в память и выполнять некоторые другие действия.

Инструкции расширения SSE (SSE 2) n n n n n Инструкции SSE 2 Инструкция Инструкции расширения SSE (SSE 2) n n n n n Инструкции SSE 2 Инструкция Описание Инструкции пересылки данных (чисел с плавающей точкой двойной точности между регистрами ХММ, а также регистрами ХММ и памятью) MOVAPD Пересылка пары упакованных выровненных чисел MOVUPD Пересылка пары упакованных не выровненных чисел MOVHPD Пересылка старшего упакованного числа MOVLPD Пересылка младшего упакованного числа MOVMSKPD Извлечение знаковой маски из пары чисел MOVSD Пересылка скалярного числа Арифметические инструкции над операндами с плавающей точкой двойной точности в регистрах ХММ ADDPD Векторное сложение ADDSD Скалярное сложение SUBPD Векторное вычитание SUBSD Скалярное вычитание MULPD Векторное умножение MULSD Скалярное умножение DIVPD Векторное деление DIVSD Скалярное деление SQRTPD Векторное извлечение квадратного корня SQRTSD Скалярное извлечение квадратного корня MAXPD Векторное нахождение максимума MAXSD Скалярное нахождение максимума MINPD Векторное нахождение минимума MINSD Скалярное нахождение минимума

Инструкции расширения SSE (SSE 2) n n n Логические инструкции над упакованными 64 -битными Инструкции расширения SSE (SSE 2) n n n Логические инструкции над упакованными 64 -битными операндами в регистрах ХММ (побитные функции) ANDPD Логическое И ANDNPD Логическое И-НЕ ORPD Логическое ИЛИ XORPD Исключающее ИЛИ Инструкции сравнения упакованных (векторных) и скалярных операндов с плавающей точкой двойной точности в регистрах ХММ с помещением результата в операнд-приемник или регистр EFLAGS CMPPD Сравнение векторное CMPSD Сравнение скалярное COMISD Упорядоченное сравнение скалярных чисел с помещением результата в биты регистра EFLAGS (если хоть один из операндов QNa. N или SNa. N, генерируется исключение #I и EFLAGS не модифицируется) UCOMISD Неупорядоченное сравнение (то же, но исключение #I генерируется только в случае SNa. N) Инструкции перестановок и распаковки операндов с плавающей точкой двойной точности в регистрах ХММ SHUFPD Перестановка элементов в упакованных операндах UNPCKHPD Распаковка и чередование старших элементов (в приемнике собираются старшие части операндов) UNPCKLPD Распаковка и чередование младших элементов (в приемнике собираются младшие части операндов)

Инструкции расширения SSE (SSE 2) n n n n Инструкции преобразований в формат и Инструкции расширения SSE (SSE 2) n n n n Инструкции преобразований в формат и из формата упакованных и скалярных чисел с плавающей точкой двойной точности CVTPD 2 PI Преобразование упакованных чисел с плавающей точкой в упакованные целые (двойные слова) CVTTPD 2 PI Преобразование с усечением упакованных чисел с плавающей точкой двойной точности в упакованные целые (двойные слова) CVTP 12 PD Преобразование упакованных целых (двойных слов) в упакованные числа с плавающей точкой двойной точности CVTPD 2 DQ Преобразование упакованных чисел с плавающей точкой в упакованные целые (двойные слова) CVTTPD 2 DQ Преобразование с усечением упакованных чисел с плавающей точкой двойной точности в упакованные целые (двойные слова) CVTDQ 2 PD Преобразование упакованных 32 -битных целых в упакованные числа с плавающей точкой двойной точности CVTPS 2 PD Преобразование упакованных чисел с плавающей точкой одинарной точности в числа двойной точности CVTPD 2 PS Преобразование упакованных чисел с плавающей точкой двойной точности в числа одинарной точности CVTSS 2 SD Преобразование скалярного числа с плавающей точкой одинарной точности в число двойной точности CVTSD 2 SS Преобразование скалярного числа с плавающей точкой двойной точности в число одинарной точности CVTSD 2 SI Преобразование скалярного числа одинарной точности в 32 -битное целое CVTTSD 2 SI Преобразование с усечением скалярного числа двойной точности в 32 -битное целое CVTS 12 SD Преобразование 32 -битного целого в число двойной точности

Инструкции расширения SSE (SSE 2) n n n n n n n Инструкции преобразований Инструкции расширения SSE (SSE 2) n n n n n n n Инструкции преобразований с числами одинарной точности CVTDQ 2 PS Преобразование упакованных 32 -битных целых в упакованные числа с плавающей точкой одинарной точности CVTPS 2 DQ Преобразование упакованных чисел одинарной точности в числа двойной точности CVTTPS 2 DQ Преобразование с усечением упакованных чисел одинарной точности в числа двойной точности Целочисленные 128 -битные SIMD-инструкции MOVDQA Пересылка выровненного 128 -битного операнда MOVDQU Пересылка не выровненного 128 -битного операнда MOVQ 2 DQ Пересылка 64 -битного целого из ММХ в ХММ MOVDQ 2 Q Пересылка 64 -битного целого из ХММ в ММХ PMULUDQ Умножение упакованных беззнаковых 32 -битных целых PADDQ Сложение упакованных 64 -битных целых PSUBQ Вычитание упакованных 64 -битных целых PSHUFLW Перестановка упакованных младших слов PSHUFHW Перестановка упакованных старших слов PSHUFD Перестановка упакованных двойных слов PSLLDQ Логический сдвиг 64 -битных чисел влево PSRLDQ Логический сдвиг 64 -битных чисел вправо PUNPCKHQDQ Распаковка старших 64 -битных чисел PUNPCKLQDQ Распаковка младших 64 -битных чисел Управление кэшированием CLFLUSH Очистка и инвалидация строки кэша (всех уровней), связанной с указанным операндом в памяти LFENCE Упорядочивание операций загрузки из памяти MFENCE Упорядочивание операций загрузки и записи PAUSE Улучшение выполнения цикла ожидания MASKMOVDQU Выборочная запись байтов из ХММ в память, минуя кэш MOVNTPD Запись пары упакованных чисел из ХММ в память, минуя кэш MOVNTDQ Запись 128 -битного числа из ХММ в память, минуя кэш MOVNTIЗапись двойного слова из регистра общего назначения в память, минуя кэш

Выполнение простейшей операции в CPU Pentium 4 число А число В команда микро команда Выполнение простейшей операции в CPU Pentium 4 число А число В команда микро команда результат System Bus – системная шина Bus Unit – шина данных 2 nd Level Cache – кэш 2 -го уровня 1 st Level Cache – кэш 1 -го уровня Fetch/Decoder – декодирование команд Trace Cache – трассирующий кэш Execution – ядро исполнения Retirement – конвейер BTBs/Branch Predication – предсказание перехода/ буфер адреса перехода

Заключение В операциях над целыми числами, Pentium 4 очень быстр. В случае операций над Заключение В операциях над целыми числами, Pentium 4 очень быстр. В случае операций над числами с плавающей запятой, то тут Intel полагается на SSE 2, который возможно будет принят как новый стандарт для программирования мультимедиа. В приложениях, не оптимизированных под новые инструкции, Pentium 4 будет вынужден положиться на медленный x 87 FPU и в этом случае AMD K 7 с DDRRAM его обгонит. Из-за длинного конвейера P 4 ядра, Willamette & Northwood не очень подходит для программ, требующих интенсивных действий, например искусственный интеллект в играх и интерактивные игры. Если предсказатель переходов не сможет правильно предсказать будущую операцию, то Pentium 4 будет работать вхолостую. Intel надеется, что ядро Pentium 4 будет способно обрабатывать предсказания перехода с точностью 96 -98 %. Pentium 4 содержит таблицу предсказания размером в 4 Кб, которая в 8 раз больше чем у Pentium 3. Пока по предварительным тестам Pentium 4 уступает процессорам Athlon с более низкой тактовой частотой, но сравнивались технические семплы и вполне возможно, что ситуация изменится. Pentium 4 Willamette & Northwood имеет весьма неслабый потенциал. Это первая за последние годы попытка радикального изменения устоявшейся архитектуры P 6. Все-таки конкуренция – замечательная вещь. Интересно, не будь AMD, сколько еще бы лет выходили бы P 6? А так прижали – и появились новые модели. Но AMD не дремлет – у этой компании наготове целый ряд новых моделей, которые выходят примерно в то же время, что и Pentium 4. Начинается очередная гонка вооружений на более высоком уровне. Жить все интереснее. Кто победит? И чем все закончится? Время рассудит.