ВУЗ:
Составители:
условного перехода. Подсказки порождаются компилятором и используются в процессе
декодирования команд в последовательность микроопераций в ТС. Если информации о
переходе нет в ВТВ, то подсказка имеет приоритет над статическим предсказанием.
Недостатком применения подсказок является небольшое увеличение размера кода
программы.
Исполнительное ядро процессора
Исполнительная часть ядра процессора представляет собой базовый конвейер, как
основного элемента микроархитектуры NetBurst.
Число стадий этого конвейера увеличено почти вдвое по сравнению с P6 и глубина
его достигает 20. Приведем основные операции, выполняемые базовым конвейером по
стадиям.
На стадиях 1 и 2 с использованием значения счетчика команд у буфера переходов
(ВТВ-branch Target Buffer) в кэш трассировки ТС помещаются микрооперации.
На стадиях 3 и 4 происходит выборка микроопераций у ТС, и на стадии 5
микрооперации передаются в блок распределения ресурсов (блок переименования регистров
или регистров псевдонимов). Эта стадия введена в связи с задержкой передачи данных по
проводникам.
На 6 стадии происходит распределение ресурсов, требуемых для выполнения
микрооперации. На этой стадии в зависимости от микрооперации выделяются буферы для
загрузки регистров или буферы для записи в память.
На стадиях 7 и 8 производится переименование регистров. На стадии 9 происходит
помещение микроопераций в очередь, откуда они выбираются в блок планирования,
отвечающий за работу с разными типами функциональных исполнительных устройств.
На стадиях 10-12 осуществляется собственно планирование: запись в блок
планирования, определение зависимостей между микрооперациями и ожидание разрешения
этих зависимостей. На стадиях 13-14 микрооперации посылаются в конвейер с плавающей
запятой или в один из целочисленных конвейеров.
На стадиях 15-16 происходит чтение из файлов регистров целочисленных операндов
или операндов с плавающей запятой. Стадия 17-это стадия выполнения. Эта стадия
выполняется за 1 такт, хотя сложные целочисленные инструкции и операции с плавающей
запятой требуют больше тактов, а некоторые целочисленные операции запускаются каждые
полтакта.
На стадии 18 осуществляется вычисление значения флагов («равно нулю», «перенос»
и т.д.), которые используются в командах условных переходов.
На стадии 19 происходит сравнение вычисленного результата команды перехода со
сделанным ранее предсказанием. Наконец, последняя стадия осуществляет запись результата
проверки перехода, выполненного на предыдущей стадии, в буфер переходов ВТВ.
В каждом такте ядро может посылать микрооперации в один из четырех портов,
причем 2 из них могут выдавать на исполнение по 2 микрооперации за такт (точнее, по
одной микрооперации каждые полтакта).
Таким образом, в каждом такте ядро может запускать на выполнение до 6
микроопераций, т.е. обрабатывать одновременно до шести потоков данных.
Порт 0 за первые полтакта может отправить на выполнение инструкции с плавающей
запятой (FXCH и др.) в блок FP1 и простые целочисленные инструкции в АЛУ 1, а на втором
полутакте еще одну целочисленную инструкцию на АЛУ1.
Первый порт в первом полутакте может запустить все SIMD-команды и
арифметические инструкции с плавающей запятой (сложение/умножение/деление и т.п.) в
блок FP2, либо сложные целочисленные команды с обычной скоростью в блок АЛУ0, а
также одну простую инструкцию в блок АЛУ2. Во втором полутакте первый порт может
выдать еще одну простую целочисленную инструкцию на АЛУ2. Второй порт запускает
условного перехода. Подсказки порождаются компилятором и используются в процессе декодирования команд в последовательность микроопераций в ТС. Если информации о переходе нет в ВТВ, то подсказка имеет приоритет над статическим предсказанием. Недостатком применения подсказок является небольшое увеличение размера кода программы. Исполнительное ядро процессора Исполнительная часть ядра процессора представляет собой базовый конвейер, как основного элемента микроархитектуры NetBurst. Число стадий этого конвейера увеличено почти вдвое по сравнению с P6 и глубина его достигает 20. Приведем основные операции, выполняемые базовым конвейером по стадиям. На стадиях 1 и 2 с использованием значения счетчика команд у буфера переходов (ВТВ-branch Target Buffer) в кэш трассировки ТС помещаются микрооперации. На стадиях 3 и 4 происходит выборка микроопераций у ТС, и на стадии 5 микрооперации передаются в блок распределения ресурсов (блок переименования регистров или регистров псевдонимов). Эта стадия введена в связи с задержкой передачи данных по проводникам. На 6 стадии происходит распределение ресурсов, требуемых для выполнения микрооперации. На этой стадии в зависимости от микрооперации выделяются буферы для загрузки регистров или буферы для записи в память. На стадиях 7 и 8 производится переименование регистров. На стадии 9 происходит помещение микроопераций в очередь, откуда они выбираются в блок планирования, отвечающий за работу с разными типами функциональных исполнительных устройств. На стадиях 10-12 осуществляется собственно планирование: запись в блок планирования, определение зависимостей между микрооперациями и ожидание разрешения этих зависимостей. На стадиях 13-14 микрооперации посылаются в конвейер с плавающей запятой или в один из целочисленных конвейеров. На стадиях 15-16 происходит чтение из файлов регистров целочисленных операндов или операндов с плавающей запятой. Стадия 17-это стадия выполнения. Эта стадия выполняется за 1 такт, хотя сложные целочисленные инструкции и операции с плавающей запятой требуют больше тактов, а некоторые целочисленные операции запускаются каждые полтакта. На стадии 18 осуществляется вычисление значения флагов («равно нулю», «перенос» и т.д.), которые используются в командах условных переходов. На стадии 19 происходит сравнение вычисленного результата команды перехода со сделанным ранее предсказанием. Наконец, последняя стадия осуществляет запись результата проверки перехода, выполненного на предыдущей стадии, в буфер переходов ВТВ. В каждом такте ядро может посылать микрооперации в один из четырех портов, причем 2 из них могут выдавать на исполнение по 2 микрооперации за такт (точнее, по одной микрооперации каждые полтакта). Таким образом, в каждом такте ядро может запускать на выполнение до 6 микроопераций, т.е. обрабатывать одновременно до шести потоков данных. Порт 0 за первые полтакта может отправить на выполнение инструкции с плавающей запятой (FXCH и др.) в блок FP1 и простые целочисленные инструкции в АЛУ 1, а на втором полутакте еще одну целочисленную инструкцию на АЛУ1. Первый порт в первом полутакте может запустить все SIMD-команды и арифметические инструкции с плавающей запятой (сложение/умножение/деление и т.п.) в блок FP2, либо сложные целочисленные команды с обычной скоростью в блок АЛУ0, а также одну простую инструкцию в блок АЛУ2. Во втором полутакте первый порт может выдать еще одну простую целочисленную инструкцию на АЛУ2. Второй порт запускает
Страницы
- « первая
- ‹ предыдущая
- …
- 160
- 161
- 162
- 163
- 164
- …
- следующая ›
- последняя »