Кто-нибудь располагает информацией о количестве конвейеров в процессорах Pentium 3/4 ? Я знаю, что в первом Pentium было 2 конвейера, а во втором 3 (унаследовано от Pentium Pro). Читал много обзоров по Pentium 4, но ни в одной статье о количестве конвейеров не упоминалось.
Pentium II - ядро P6 (P Pro) + MMX Pentium 3 - ядро P6 (P Pro) + MMX + SSE так что кол-во конвееров не изменилось. А в Pentium IV конвееров вроде нет совсем . Внутри это RISC просессор, который выполняет не x86 инструкции, а µop'ы. Смотри Execution Units and Issue Ports в IA-32 Intel® Architecture Optimization Reference Manual (24896611.pdf) Да и остальное об Intel NetBurst® Microarchitecture тоже.
Hunter > "ни в одной статье о количестве конвейеров не упоминалось" А говоришь, что знаком с архитектурой P6 Почитай Фога, хотя ответа "скоко в граммах вешать" все равно не найдешь. А потому, что только в PPlain\PMMX было всего два параллельных пайпа (U и V) для исполнения инструкций. В P6 и NetBurst все совсем не так. К примеру, в NetBurst мопы поступают в execution core из реордер-буфера (ROB) по 4 портам в 8 исполнительных блоков (units) и распределяются по 18 подблокам (subunits). Быстрые блоки (add,sub,logic) буферировать незачем, т.к. они исполняют команды со скоростью их поступления. Супер-медленные (типа fdiv) тоже не имеет смысла, т.к. следующая команда может подождать своего часа и в ROB. Остальные подблоки, у которых throuhput меньше latency - по всей видимости буферированы, но в IA-32 упоминается, что некоторые блоки\подблоки могут разделять одну пайплайн. Поэтому сколько всего этих буферов-пайпов и какова их длина ИМХО мало кому известно и интересно. Примерно тоже самое имеет место и в P6 family (см. у Фога раздел 14.4 Out of order execution), т.к. логика работы исполнительного ядра таже - только число портов и исп.блоков другое. И насчет 3-х конвейеров PPro\PII ты ИМХО не прав. Видимо ты имеешь ввиду понятие "three-way superscalar, pipelined micro-arhitecture", которое согласно IA-32 просто означает, что "используя параллельную технику, процессор способен в среднем decode, dispatch и complete execution (retire) трех инструкций за один такт ". Никакого отношения к реальному количеству конвейров это понятие ИМХО не имеет.
leo, инфу о трех конвейеров на P6 я же взял не из головы, а читал из каких-то источников. Хотя, может быть, сами авторы в чем-то заблуждались, либо написали "образно". Как известно, в P6 блок декодирования может обрабатывать три инструкции за такт: две простых и одну сложную. А затем параллельно исполнять в исполнительных блоках. Может это и послужило поводом заявить, что в P6 три конвейера ? Но тогда возникает один вопрос: декодируем 3 инструкции за такт, получаем 6 микроопераций (1+1+4). Но число исполнительных блоков отличается. Так сколько же тогда конвейеров в P6 ? S_T_A_S_, как это ? ) Вроде бы все современные процы считаются суперскалярными, а суперскалярность подразумевает под собой наличие нескольких конвейеров. Где же истина ? Только не говорите, что "истина где-то рядом" ))
Да забудь ты про конвееры, как о чем-то целом и количественном, это понятие видимо осталось от PPlain\PMMX Конвеер один, это грубо говоря, вся цепочка устройст (декодеров, блоков, и т.д.), которые обрабатывают инструкции, мопы, данные ... вот "конвеер" P6 (статья PC Magazine September 12, 1995) Код (Text): ------------------------------------ | Встроенный кэш второго уровня (256 | | Кбайт или 512 Кбайт) | | | ------------------------------------ | | | | Внешняя Внешняя Шина Шина шина шина данных адреса данных адреса (64 бит (31 бит) (64 бит (36 бит) + ECC, | ------------------------ | + ECC, | 8 бит) | | Буфер упорядочения | ----------->| 8 бит) | | | ---> |обращений к памяти (MOB)| <--->| | | | | | | ------------------------ | | | | --------------------- <----- | | | |<-> | Блок интерфейса | ------------------------ | | |<--------|--> | шины |<---------> | Кэш данных (8 Кбайт) |------|----->| | | --------------------- ------------------------ <--->| | | ------------------------ | | ----------------------------------- | Блок интерфейса памяти |------|----->| | Блок выборки/декодирования команд | ------------------------ <--->| | | Кэш команд Указатель | |__________________________ | | (8 Кбайт) <-- на следующую | | | | команду | ------- ------------------------ | | ----------------------------------- | |Порт 4 | Блок памяти данных |->| | | | | |------> ------------------------ | | | | | | | | 16-байт буфер Буфер адреса | | ------------------------ | | выравненных перехода - | |Порт 3 | Блок генерации адреса| | | команд x86 содержит до | |------>| записи |->| | | | | 512 элементов | | ------------------------ | | | | |_______ | | | ------------------------ | | | |__ |_ | | Стан- |Порт 2 | Блок генерации адреса|->| | ------|------| --------|--------------- | ция- |------>| считывания | | | | Дешифратор команд x86 | | резер-| ------------------------ | | | | | | | вуар | ------------------------ | | Простой Простой Сложный Блок | | (буфе-|Порт 1 | Блок целочисленных | | | блок блок блок <->упорядо-| | ризу- |------>| операций | | | обработки обработки обработки чения | | ет | |_______________________ |<-->| | (1 микро- (1 микро- (от 1 до 4 команд | | 20 | | Блок выполнения | | | команда команда микро- | | мик- | | переходов | | | за такт) за такт) команд | | роко- | ------------------------ | | за такт) | | манд) | ----------------------- | ----------------------------------------- | |Порт 0 | Блок целочисленных | | | | | | | | | |------>| операций | | ---------------------------------------- | | | ----------------------| | | Таблица псевдонимов регистров | | | | Блок целочисленного | | | и блок распределения | | | | деления | | ---------------------------------------- | | | ----------------------| | | | | | Блок сложения с | | | | | | плавающей точкой | | | | | | ----------------------|<-->| | | | | Блок умножения с | | | | | | плавающей точкой | | | | | | ----------------------| | | | | | Блок деления с | | | | | | плавающей точкой | | | | | | ----------------------| | | | | | Блок сдвиговых | | | | | | операций | | | | | ----------------------- | | | |<------------------------------------| | | | ------------------------ | | | |<---- | Буфер восстановления |<----| | | | | последовательности | | | | | | (содержит до 40 | | | | | | элементов) | | | ------- |------------------------| | | | | Массив реальных | | |<----------------------------------->| регистров | | | В среднем 3 микрокоманды за такт ------------------------ | Шины результатов Как видишь, местами он "растекается" на несколько частей (3 декодера, 5 портов и т.д.), а местами стекается в одно устр-во (reservation station, ROB,RAT ...)
Код (Text): Блок упорядоченной обработки _______ | | | | I1 | |- Архитектура конвейера P6 |----|--| | I2 | | Определение указателя на |____| | следующую команду.Обращение к | | | кэш-памяти команд. Создаетс | I3 | |- буфер команд емкостью 16 байт. |____| | Команды процессора x86 вырав- | | | ниваются перед посылкой в де- | I4 |--| шифраторы. |____| | | | |- Команды x86 декодируются и | I5 | | преобразуются в микрокоманды. |____| | | | | | I6 | | |____|__| | | | Регистры переименовываются с помощью | I7 | |- таблицы псевдонимов регистров (RAT - |____|__| register alias table). | | | | I8 | | Микрокоманды выдаются и запи- | | |- сываются в станцию-резервуар, |____|__| статус команд записывается в буфер восстановления последо- вательности. Блок обработки с изменением последовательности ____ __ | O1 | | Микрокоманды направляются из |____| |__ станции-резервуара в исполни- | O2 | | тельные блоки. |____|__| | | | | O3 | |__ Микрокоманды выполняются (один |____|__| или более тактов). Блок вывода ____ _ | R1 | | Результаты становятся доступными |____| | для пересылки в буфер восстанов- | | | ления последовательности. Прове- | R2 | | __ ряются взаимозависимости. Со- |____| | тавляется очередь на удаление | | | микрокоманд. Обновляется содер- | R3 | | жимое реальных регистров и па- |____|_| мяти.
Hunter > Суперскалярность - это возможность параллельной обработки? Значит конвеер ни как не влияет, это же просто "транспорт", а влияют execution unit'ы. bogrus > Гы, мне всегда нравились таие картинки - полёт мысли отдела маркетинга - сразу "понятно", чем длинне конвеер тем лучше )))))))
S_T_A_S_, конвейер состоит из нескольких ступеней (например декодирование, исполнение и т.д.). К примеру, у P4 на ядре Northwood 20 ступеней, а у Prescott уже 31 ) Так что конвейер в процессорах - это не просто "транспорт".
И как разное кол-во стадий влияет на сам смысл транспорта? Твой пример как раз этот смысл и показывает - продвижение инструкции от одной стадии выполнения к другой. А выполнением занимаются другие блоки (например декодирование, исполнение и т.д.).
S_T_A_S_, я просто имел ввиду, что конвейер это не какой-то конкретный транспортер, а довольно образное понятие. Т.е. обработка инструкций разбивается на несколько этапов (например, несколько стадий на декодирование, несколько на исполнение и т.д. - количество зависит от модели проца). И совокупность этих этапов и составляет конвейер, т.е. он отражает текущее состояние инструкций в процессе их обработки. Хотя трактовать можно по-разному, смотря с какой стороны смотреть ))