2016-04-25 5 views
0

Agner Fog in his microarch.pdf says:x86 декодирование нескольких микроопераций инструкций

Декодирование становится более эффективным, так как инструкция, которая генерирует один слитый μop может перейти в любой из трех декодеров в то время как команда, которая генерирует два микроопераций может идти только к декодеру D0.

Я знаю, что декодеры принимают x86 машинный код в качестве входных данных (например, на выходе из ассемблера mov eax, eax), и производить микроопераций в качестве выходного сигнала.

Как определить, какой декодер должен декодировать конкретную инструкцию до декодирования? Может быть, предварительные декодеры?

ответ

2

Микроархитектура Agner PDF объясняет декодирование, и что происходит с несколькими командами.

Если команда multi-uop не является первой insn в декодируемом блоке, декодирование заканчивается на этом insn. В следующем цикле декодирование начинается с multi-uop insn, поэтому он попадет в сложный декодер, который может обрабатывать многоуровневые инструкции.

Именно поэтому повторяющийся шаблон 3-1-3-1 декодирует лучше, чем повторяющийся шаблон 3-3-1-1.

Предварительные декодеры отмечают только длину и границы команд. Они еще не знают, какие insns будут декодировать до нескольких uops. Это требует фактического декодирования инструкций, поэтому нет возможности перетасовать поток команд вокруг, чтобы отправить сложные инструкции в сложный декодер.

Именно поэтому заказ инструкций имеет значение, когда вы испытываете недостаток в декодерах. Для процессоров с кэшем uop производительность декодирования обычно не критична. Если это так, у вас проблема с размером кода. Надеюсь, что редко бывает, что код работает достаточно часто, так как его производительность имеет значение, но нередко достаточно, чтобы он не был горячим в кэше uop.