K8


K8 — x86-совместимая микроархитектура центрального процессора, разработанная корпорацией AMD. Впервые представлена 22 апреля 2003 года: были выпущены первые процессоры Opteron, предназначенные для серверного рынка. На основе этой микроархитектуры выпускались семейства микропроцессоров Opteron, Athlon 64, Athlon 64 X2, Turion 64. Является кардинально переработанным, значительно улучшенным и расширенным вариантом микроархитектуры предыдущего поколения AMD K7. В новых процессорах удалось преодолеть ряд проблем, являвшихся ахиллесовой пятой K7, а также внесён ряд принципиально новых решений.

Микропроцессоры K8 являются суперскалярными, мультиконвейерными процессорами с предсказанием ветвлений и спекулятивным исполнением. Как и процессоры AMD K7 и Intel P6, они теоретически способны исполнять до 3 инструкций за один такт. Как и любой современный x86-процессор, K8 вначале перекодирует внешний сложный CISC набор x86 инструкций во внутренние RISC-подобные микрооперации, которые, в свою очередь, уже идут на исполнение. Для повышения производительности в рамках микроархитектуры реализовано спекулятивное исполнение с предсказанием ветвлений и запуском микроопераций Out-of-Order; для снижения влияния зависимостей по данным используются техники переименования регистров, Result forwarding и ряд других.

В микроархитектуре K8 используется конвейер с 12 стадиями, значительная часть которых приходится на декодер инструкций.

Основная проблема декодирования инструкций x86 заключается в том, что они имеют различную длину (от 1 до 15 байт). В K8 эта проблема решается путём разделения процесса разметки потока инструкций и собственно декодирования на две отдельные подзадачи исполняемые в разных блоках процессора. Дело в том, что перед помещением в кэш первого уровня для инструкций (L1I) проходят через процедуру предекодирования в темпе по 4 байт инструкций за такт. А информация о разметке помещается в специальный массив тегов ассоциированный с L1. Благодаря этому упрощается дальнейшее, рабочее декодирование и сокращается конвейер. Такое решение является уникальным, так как в иных процессорах x86 (за исключением K7) используются иные техники решения этой проблемы. Так, в процессорах Intel P6 разметка осуществляется «на лету», а в Intel NetBurst инструкции проходят декодирование до сохранения в L1 (вместо стандартного кэша инструкций используется специальная, довольно сложная структура, хранящая уже декодированные микрооперации — кэш трасс).

K8 располагает двухканальным наборно-ассоциативным кэшем полезным объёмом 64 Кбайт со строкой равной 64 байт. Однако, помимо собственно инструкций, в процессоре также хранится массив тегов разметки — 3 бит на один байт L1, то есть порядка 21 Кбайт, а также дескрипторы предсказателя ветвлений — порядка 8 Кбайт.