[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
непонятные термины требуют ссылки (на их описание в статеь о кэше) или разъяснения на месте
Строка 13:
Основная проблема декодирования инструкций x86 заключается в том, что они имеют различную длину (от 1 до 15 байт). В K8 эта проблема решается путём разделения процесса разметки потока инструкций и собственно декодирования на две отдельные подзадачи исполняемые в разных блоках процессора. Дело в том, что перед помещением в [[Гарвардская архитектура|кэш первого уровня для инструкций]] (L1I) проходят через процедуру предекодирования в темпе по 4 байт инструкций за такт. А информация о разметке помещается в специальный массив тегов ассоциированный с L1I. Благодаря этому упрощается дальнейшее, рабочее декодирование и сокращается конвейер. Такое решение является уникальным, так как в иных процессорах x86 (за исключением K7) используются иные техники решения этой проблемы. Так в процессорах Intel P6 разметка осуществляется «на лету», а в Intel [[NetBurst]] инструкции проходят декодирование ''до'' сохранения в L1I кэше (вместо стандартного кэша инструкций используется специальная, довольно сложная структура хранящая уже декодированные микрооперации — кэш трасс).
 
K8 располагает 2-х канальным [[наборноассоциативный кэш L1I|наборноассоциативным кэшем L1I]] полезным объёмом 64 Кбайт со [[строка кэша|строкой]] равной 64 байт. Однако помимо собственно инструкций в процессоре также хранится [[массив тегов разметки]] — 3 бит на один байт L1I, то есть порядка 21 Кбайт, а также [[дескрипторы предсказателя ветвлений]] — порядка 8 Кбайт.
 
Из L1I инструкции выбираются сразу 16-байтными блоками, которые отправляются одновременно, через специальный буфер (fetch-буфер), на исполнительный конвейер и в блок предсказания ветвлений (branch predictor). В предсказателе ветвлений блок инструкций анализируется с использованием специального буфера адресов переходов (BTB) размером 2048 записей и ассоциированных с ним таблиц истории переходов (BHT) полной ёмкостью 16К записей, а также некоторых вспомогательных устройств. В случае если в блоке инструкции содержался переход, то выборка следующего блока будет выполнена уже с предсказанного адреса. К сожалению branch predictor — слишком сложное устройство, чтобы работать в полном темпе процессора, поэтому все предсказания выполняются с [[латентность]]ю 2 такта, то есть, если процессор встречает переход, то следующая выборка из L1I будет выполнена только через такт. В большинстве случаев эта задержка нивелируется тем что в одном 16-байт блоке содержится много инструкций, и общий темп выборки является опережающим.