3. Характеристики блоков процессора Pentium 4.

Системная шина (System Bus).

Хорошо известно, что частота шины (FSB) Pentium III составляет 133 МГц, и позволяет передавать 64 бит данных за такт (пропускная способность - 8 байт * 133 млн./с = 1066 Мб/с). Частота шины первых Pentium 4 только 100 МГц и также 64-разрядная, но является "quad-pumped", использует те же принципы работы, что и AGP 4x. Таким образом, шина может передавать 8 байт * 100 млн./с * 4 = 3200 Мб/с. Это очевидно немаленькое улучшение, которое позволяет превзойти процессоры AMD с шиной EV6. На момент выхода Pentium 4 наибольшая частота шины Athlon'ов была 133 МГц, разрядность 64 и шина "double-pumped" (пропускная способность - 8 байт * 133 млн./с * 2 = 2133 Мб/с).

Новая шина Pentium 4 позволяет обмениваться данными с системой быстрее, чем любой другой x86-процессор. Однако самая быстрая процессорная шина не сильно поможет, если память не сможет доставлять данные с соответствующей скоростью. Первый чипсет i850, выпущенный Intel для нового процессора, использует два канала Rambus и, следовательно, дорогостоящую память RDRAM. Эти два канала RDRAM позволяют работать с той же скоростью, что и системная шина Pentium 4 (3200 Мб/с).

Усовершенствованный передающий кэш (Advanced Transfer Cache).

Advanced Transfer Cache
Как и Pentium III (Coppermine) новый процессор имеет не менее чем 256 килобайт 8-канального кэша второго уровня (L2). Но на этом сходство заканчивается. В кэше Pentium 4 используются 128-байтные линии, которые разделяются на две 64-байтные части. Когда происходит выборка данных из системы (основная память, AGP, PCI,...), считывается 64 байт за один проход, что обеспечивает хорошую производительность при пакетной передаче, в особенности при обращении к RDRAM, но весьма плохо если только один байт из 64 является затребованным. Очевидно, это будет верно и для операций записи в случае когда кэш-канал становится "загрязненным", то при изменении данных кэша возникает необходимость записи обратно в систему (память, AGP, PCI,...). Латентность чтения L2-кэша в Pentium 4 составляет 7 тактов, он имеет 256-битное подключение к ядру и очевидно работает на частоте ядра процессора. Произведя несложные вычисления, можно представить пропускную способность между L2-кэшем и ядром: 48 Гб/с для Pentium 4 с частотой 1,5 ГГц.

Кэш первого уровня (L1 cache) Pentium 4.

После рассмотрения L2-кэша будет более чем логично перейти к кэшу первого уровня (L1). Pentium III оборудован 16Кб L1-кэша для инструкций и 16 Кб для данных, в Pentium 4 только 8 Кб L1-кэша данных, в то время как кэш трассировки выполнения (Execution Trace Cache) заменяет L1-кэш инструкций Pentium III.

Возможно, Intel уменьшила размер L1-кэш данных до 8 Кб, что составляет половину размера L1-кэша данных в Pentium III и только восьмую (!) часть от кэша Athlon'ов, для того чтобы уменьшить латентность до 2 тактов. В результате латентность чтения, в общем-то, меньше, но небольшой размер L1-кэша данных в Pentium 4 может становиться причиной снижения производительности.

4-х канальный ассоциативный L1-кэш данных Pentium 4 использует 64-байтные каналы. Двухпортовая (dual-port) архитектура позволяет производить одну операцию загрузки и одну сохранения за такт.

Pentium III выпущенный в феврале 1999 года, включает в себя потоковые SIMD расширения. "Потоковая" часть SSE представлена инструкциями предвыборки Pentium III, которые позволяют программному обеспечению загружать данные в кэш, перед тем как они будут затребованы процессорным ядром. Данные инструкции присутствуют и в наборе инструкций Pentium 4, но с новой аппаратной предвыборкой часть из них реализуются автоматически. Это новое устройство способно распознать схему доступа к данным программного обеспечения выполняемого на Pentium 4, таким образом, процессор "предугадывает", какие данные понадобятся и совершает их предвыборку в кэш.

Подобная ситуация хорошо знакома по сложным алгоритмам кэша жестких дисков, и отлично видно как возрастает скорость работы с жестким диском в определенных ситуациях. Аппаратная предвыборка Pentium 4 может значительно ускорить выполнение программ, которые используют большие массивы данных.

Исполняющий конвейер.

Исполняющий конвейер
В Pentium III или Athlon, которые имеют L1-кэш инструкций, код загружается в этот кэш и сохраняется пока не придет время для его выполнения. После чего код переходит в устройство декодирования, который, например, в Athlon'е содержит 3 прямых (direct path) и 3 векторных (vector path) декодера, которое вырабатывает микрооперации пригодные для обработки на модуле выполнения процессора. Такая ситуация имеет несколько отрицательных моментов. Во-первых, довольно сложные x86-инструкции занимают некоторое время на декодирование. В худшем случае все декодирующие модули заняты преобразованием сложных инструкций, таким образом, задерживая исполнительный конвейер процессора. Другая проблема в том, что x86-инструкции предполагаемые для повторного выполнения (например, в небольших циклах) декодируются каждый раз, когда они передаются на выполнение, на что тратится часть времени. Программные ветвления - еще одна ситуация с затратами по времени для процессора с L1-кэшем инструкций, где конвейер начинается с уровня декодера.

Кэш трассировки выполнения (Execution Trace Cache) Pentium 4 не испытывает вышеописанных проблем. Идея кэша трассировки фактически весьма проста, но для этого требуется больше "кремниевых ресурсов" и конструкторской квалификации, для замещения старого доброго L1-кэша инструкций. По существу, кэш трассировки это ничто иное как L1-кэш инструкций находящийся после декодера.

Как уже было сказано о термине "mOP", это простые инструкции на языке доступном для понимания исполняющими модулями. Они имеют определенный размер и легче для обработки, чем x86-инструкции с переменной длиной. При помощи кэша трассировки Pentium 4 экономит время на перекодирование повторяющихся инструкций и может легче проверить зависимости необходимые для предсказания переходов. Данный кэш гарантирует непрерывную подачу инструкций в конвейер процессора, предохраняя процесс выполнения от возможной угрозы остановки декодирующих модулей. Это особенно важно в связи с высокочастотным дизайном Pentium 4. Кэш трассировки подает на следующую ступень конвейера 3 mOP каждый такт, и, таким образом, обеспечивает такую же скорость как у Athlon'а при идеальных условиях.

В процессоре Pentium III размер mOP составляет 118 бит. Intel не оглашала физический размер кэша трассировки а также размер mOP в Pentium 4. Известно только, что этот кэш может вмещать 12000 mOPs. На основе имеющихся данных можно предположить, что размер кэша трассировки составляет 92-96 Кб. Получается довольно неплохая характеристика, если принимать размер одной mOP в среднем 64 бит.

96 Кб довольно значительный размер и в шесть раз больше, чем 16 Кб L1-кэша инструкций в Pentium III. Учитывая тот факт, что в кэше трассировки сохраняются декодированные x86-инструкции, Pentium 4 осведомлен о том, что фактически делается и требуется. Декодирующие модули, заполняющие кэш обеспечивают только теми mOP, которые фактически будут выполнены.

Следующий пример показывает фактический код в верхнем блоке и содержание кэша трассировки в нижнем. Неиспользуемый код не сохраняется в кэше.
Пример кода

Декодеру необходимо процессорное ПЗУ микрокода для формирования иногда довольно длинных последовательностей mOP. В этом случае кэш трассировки не заполняется всеми этими mOP. Как заглушка он только содержит некоторые флаги, сигнализирующие что секвенсор микроинструкций предполагает поддержку чOP для следующей ступени конвейера. Неизвестно как много микроопераций за такт может сформировать секвенсор микроинструкций, но не будет сюрпризом если это количество будет менее 3 mOP за такт, которое кэш трассировки может переслать на следующую ступень конвейера. Это может оказать отрицательное влияние на производительность Pentium 4, который приспособлен для простых инструкций.

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

Устройство предсказания переходов (The Trace Cache Branch Prediction Unit).

The Trace Cache Branch Prediction Unit
Устройство предсказания переходов является как бы вспомогательным для кэша трассировки. Этот буфер целей ветвления в 8 раз больше чем аналогичный в Pentium III, и его новый алгоритм предположительно лучше чем последний G-share алгоритм от AMD, используемый в Thunderbird и Spitfire. По заявлению Intel этот блок может устранять 33% непредсказаний Pentium III.

Гипер-конвейер (Hyper Pipeline).

Hyper Pipeline
Одна из наиболее известных особенностей Pentium 4 - это очень длинный конвейер. В то время как Pentium III имеет 10 ступеней а Athlon 11, Pentium 4 имеет не менее 20 ступеней.

Причина более длинного конвейера - желание Intel достижения процессором высочайших тактовых частот. Меньшие ступени конвейера, меньше транзисторов или "затворов", которые им требуются и большая скорость их работы. Однако есть одно большое неудобство при использовании длинных конвейеров. Если в конце конвейера оказывается ветвление, которое не было предсказано, приходится перезаполнять целый конвейер. Чем длиннее конвейер, тем больше "in-flight" инструкций будет потеряно, и больше времени займет, пока конвейер будет заполнен опять.

По заявлению Intel конвейер Pentium 4 может поддерживать до 126 инструкций "на лету" (in-flight), между тем им требуется до 48 операций загрузки и 24 сохранения. Таким образом, улучшенный модуль предсказания переходов, описанный выше, предположительно обеспечивающий заполнение этого конвейера, имеет нечастые возможности.

Операции в кэше трассировки, описанные выше, представляют только первых пять ступеней конвейера Pentium 4. Далее следует:
PipeLine - 5 stages
- Размещение ресурсов;
- Регистровое переименование (распределение);
- Запись в очередь mOP;
- Запись в диспетчеры (планировщики) и вычисление зависимостей;
- Отправка mOP в их исполняющие модули;
- Чтение файла регистров (register file) (чтобы гарантировать, что для текущей инструкции используется корректный регистр(ы) из 128 универсальных регистровых файлов).
После этого наступает фактическое выполнение mOP.

Исполняющие модули (The Rapid Execution Engine).

The Rapid Execution Engine
Вышеприведенное изображение фактически показывает все исполняющие модули Pentium 4. Основную часть "Быстрого Движка" составляют два double-pumped АЛУ и AGU. Каждый из четырех работает на удвоенной частоте процессора потому, что может каждые пол такта принимать mOP. Intel не просветила работают ли эти модули действительно на удвоенной частоте процессора, или каждый из них в реальности содержит два идентичных подмодуля, работающих на нормальной частоте, и они просто могут принимать микрооперации попеременно каждые пол такта. Хотя фактически это не имеет значения поскольку результат налицо.

Несколько другая ситуация получается с инструкциями, которые не могут быть обработаны модулями быстрого выполнения. Эти инструкции или микрооперации могут обрабатываться только "медленным АЛУ", который работает не с двойной скоростью. Большинство инструкций вынуждено использовать этот путь, что, безусловно, звучит пугающе. Однако большая часть кода фактически содержит наиболее простые инструкции (AND, OR, XOR, ADD,...), что делает данную технологию довольно полезной.

Если посмотреть на блоки, представляющие FPU-часть Pentium 4, то увидим ситуацию несколько хуже. При сравнении данной части с блок-схемой Pentium III, можно заметить что Intel фактически урезала некоторые части SSE/MMX. Pentium III использует два MMX и два SSE модуля, а в Pentium 4 их только по одному. Intel утверждает, что добавочные модули не повышают производительности SSE/SSE2, MMX или FPU. Однако результаты некоторых тестов свидетельствуют не в пользу данного заявления.

SSE2 (Double Precision Streaming SIMD Extensions).

144 новые инструкции включают, прежде всего, все что есть в SSE. Упакованные 128-битные данные, которые могли быть только в виде четырех значений с плавающей точкой одинарной точности в SSE могут теперь обрабатываться во всех следующих вариантах:

Возможности, несомненно, обширные и небесполезные. Intel надеется, что разработчики программного обеспечения вскоре заменят старые x87-FPU-инструкции на SSE2-инструкции с плавающей точкой двойной точности. AMD заявила также, что ее Hammer-линия x86-64 процессоров будет включать SSE2.

Но, по мнению некоторых аналитиков, есть сомнения, что SSE2 сможет заменить x87-инструкции в научном программном обеспечении. Не следует забывать, что первоначальный FPU использует 80-разрядные значения с плавающей точкой, которые не меньше чем 64-разрядные в SSE2.

2. Структурные схемы процессоров Содержание 4. Hyper-Threading Technology (Simultaneous Multi-Threading)