K8: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Содержимое удалено Содержимое добавлено
Vlom (обсуждение | вклад) мНет описания правки |
User№101 (обсуждение | вклад) орфография |
||
Строка 3:
== Основные тезисы ==
Микропроцессоры K8 являются [[Суперскалярный процессор|суперскаляр]]ными, мультиконвеерными процессорами с предсказанием ветвлений и спекулятивным исполнением. Как и процессоры AMD K7 и Intel P6 они теоретически способны исполнять до 3-х инструкций за один такт. Как и любой современный x86 процессор K8 вначале перекодирует внешний сложный [[CISC]] набор x86 инструкций во внутренние [[RISC]]-подобные микрооперации, которые в свою очередь уже идут на исполнение. Для повышения производительности в рамках микроархитектуры реализовано спекулятивное исполнение с предсказанием ветвлений и [[Out-of-Order]] запуском микроопераций, для снижения влияния зависимостей по данным используются техники
== Конвеер K8 ==
В микроархитектуре K8 используется
=== Выборка и декодирование инструкций ===
Основная
K8 располагает 2-х канальным наборноассоциативным L1I полезным объёмом 64 Кбайт со строкой равной 64 байт. Однако помимо собственно инструкций в процессоре также хранится массив тегов разметки — 3 бит на один байт L1I, то есть порядка 21 Кбайт, а также дескрипторы предсказателя ветвлений — порядка 8 Кбайт.
Из L1I инструкции выбираются сразу 16-байтными блоками, которые отправляются одновременно, через специальный буфер (fetch-буфер), на исполнительный
Из fetch-буфера инструкции попадают на декодер. Каждую инструкцию x86 K8 относит к одному из трёх классов: DirectPath — инструкции перекодирующиеся в один МОП (микрооперацию); DirectPathDouble — инструкции перекодирующиеся в 2 МОПа; и VectorPath — инструкции декодирующиеся в набор более чем из 2-х МОПов. DirectPath и DirectPathDouble считаются простыми, а VectorPath сложными. Фактически в K8 имеется 2 различных блока декодеров работающие параллельно и дополняющие друг друга. Основной блок представляет из себя комплекс из 3-х простых декодеров работающих совместно и декодирующих до 3-х DirectPath и DirectPathDouble инструкций за такт, в любой комбинации. Второй блок занимается исключительно VectorPath инструкциями и декодирует по одной такой инструкции за такт. Когда работает VectorPath декодер, соответствующие стадии простых декодеров блокируются. Таким образом декодер K8 можно считать довольно эффективным и производительным устройством умеющим перекодировать до трёх простых или одной сложной инструкции за такт. Результаты декодирования, МОПы через промежуточные буферы перепаковываются в специальные группы по три МОПа в группе (лайны). Мопы в группе следуют строго в порядке изначального кода программы, перестановка не производится. Мопы DirectPath и DirectPathDouble инструкций могут смешиваться как угодно (кроме инструкции умножения, которая декодируется в 2 МОПа и всегда помещается в один лайн), мопы одной DirectPathDouble инструкции даже могут быть расположены в разных лайна, но все мопы VectorPath инструкций должны следовать в целом числе групп и не могут смешиваться с мопами от простых инструкций, что ведёт к некоторой фрагментации и неполному заполнению групп, но впрочем не является частой ситуацией, так как абсолютное большинство инструкций в K8 являются простыми.
=== Исполнение и отставка ===
Интересной особенностью K8 является то, что процессор внутри себя оперирует целыми группами по 3 МОПа, что позволяет значительно уменьшить количество управляющей логики процессора. В процессорах Intel хотя МОПы и идут на некоторых стадиях
В процессорах микроархитектуры K7 и K8 разработчики решили обойти эту проблемму сделав МОП двухкомпонентным. Каждый МОП в этих процессорах состоит из двух элементарных инструкций, одна микроинстрокция целочисленной либо плавающей арифметики+ одна микроинструкция адресной арифметики. Таким образом инструкции типа Load-Op и Load-Op-Store могут декодироваться в K8 всего в один МОП, что экономит ресурсы процессора и
При необходимости, один из компонентов МОПа может не использоваться и будет заполнен пустышкой. Так инструкция типа Load будет перекодирована только в один МОП содержащий, только адресную компоненту.
Нужно сказать, что в новых процессорах Intel для ряда инструкций типа Load-Op также применён подобный механизм слияния микроопераций в один МОП с последующим его разделением перед запуском МОПа на исполнение, который они назвали microfusion.
Строка 28:
Группа из 3-х двухкомпонентных МОПов сходит с декодера и дальше контролируется процессором как единое целое с помощью специального блока — ICU (Instruction Control Unit). Группы мопов проходят стадии переименования регистров и выделения ресурсов, затем размещаются в ROB (Re-Order Buffer). В ROB группы инструкций хранятся до момента отставки, отставка инструкций производится сразу всей группой только когда все МОПы в группе будут исполнены и только в порядке очерёдности заданной исходной программой. Ёмкость ROB в K8 равна 24 группы, что соответствует 72 МОПам либо 144 микрооперациям. В процессоре K8 используется статическая схема распределения инструкций по исполнительным блокам, то есть то в какую группу ФУ будет запущен МОП напрямую зависит от положения этого МОПа в группе. Всего в процессоре имеется 3 планировщика инструкций целочисленной и адресной арифметики, по числу МОПов в группе.
Из ROB инструкции копируются в буферы планировщиков. В процессоре имеется 3 очереди планировщиков для Int-операций и 3 для адресных операций, каждая ёмкостью 8 микроопераций. В общем случае из каждой очереди инструкции могут быть запущены на
Планировка и исполнение МОПов плавающей арифметики производится в отдельном специальном устройстве. Для их исполнения процессор содержит одно устройство FMUL, одно FADD и одно FMISC являющееся вспомогательным.
== Ссылки ==
[http://www.ixbt.com/cpu/amd-hammer-family2.shtml
[http://www.amd.com/ru-ru/Processors/ProductInformation/0,,30_118_9484,00.html Семейство процессоров AMD Athlon™ 64]
|