2016-11-01 2 views
8

В некоторых ответах, которые я видел, написано на вопросы о SO, они говорят о микрокодированных инструкциях. Я задавался вопросом, что это.Что такое микрокодированная инструкция?

Может кто-нибудь объяснить, что это такое и почему они там?

+4

Версия с одним предложением заключается в том, что микрокодированный процессор работает как интерпретатор на основе кода для языка высокого уровня: инструкции на открытом языке машины разлагаются на более мелкие шаги, которые легче выполнить. В Википедии есть достойное, если жаргонное, [более подробное объяснение] (https://en.wikipedia.org/wiki/Microcode), но для объяснения _real_ требуется полный учебник по компьютерной архитектуре. – zwol

ответ

14

CPU считывает машинный код и декодирует его во внутренние сигналы управления, которые направляют правильные данные в нужные исполнительные блоки.

Большинство инструкций относятся к одной внутренней операции и могут быть декодированы напрямую. (Например, на x86, add eax, edx просто посылает EAX и EDX на целое число ALU для операции ADD, и помещает результат в EAX.)

Некоторые другие одиночные инструкции делают много больше работы. например x86's rep movs реализует memcpy(edi, esi, ecx) и требует, чтобы процессор зацикливался.

Когда декодеры команд видят такую ​​инструкцию, вместо того, чтобы напрямую производить сигналы внутреннего управления, они считывают микрокод из ПЗУ микрокода.

Микро-кодированный инструкция один, который декодирует для многих внутренних операций


Современные x86-процессоры всегда декодирующих х86 на внутренних микроопераций. В этой терминологии он все еще не считается «микрокодированным», даже когда add [mem], eax декодирует нагрузку от [mem], операцию ADU ADD и обратно обратно в [mem]. Другим примером является xchg eax, edx, который decodes to 3 uops on Intel Haswell. И что интересно, не совсем то же самое, что вы получили от использования 3 инструкций MOV для обмена с регистром нуля, потому что они не являются нулевой латентностью.

На процессорах Intel/AMD «микрокодированные» означает, что декодеры включают секвенсор микрокода, чтобы подавать микропрограммы из ПЗУ в конвейер, вместо того, чтобы создавать несколько uops напрямую.

В современных процессорах Intel ограничение на то, что декодеры могут производить напрямую, без перехода на микрокод ROM, составляет 4 устройства (плавный домен). AMD аналогично имеет однократную или двойную инструкцию FastPath, а за ее пределами - VectorPath или Microcode, как объясняется in David Kanter's in-depth look at AMD Bulldozer, в частности, о ее декодерах.

Другим примером является целочисленная инструкция DIV от x86, которая микрокодируется даже на современных процессорах, таких как Intel Haswell. См. Мой ответ на номера Why is this C++ code faster than my hand-written assembly for testing the Collatz conjecture?.

FP-деление также медленное, но декодируется на один юп, поэтому он не является узким местом переднего конца. Если разделение FP является редким и не является узким местом задержки, оно может быть столь же дешевым, как умножение. (Но если выполнения не придется ждать его результата, или узкие места на ее пропускной способности, это гораздо медленнее.)

Целочисленное деление и другие микро-кодированные инструкции могут дать ЦП трудное время, и creates effects that make code alignment matter where it wouldn't otherwise.


Чтобы узнать больше о внутренних процессорах x86, см. Wiki , и особенно Agner Fog's microarch guide.


В некоторых старых/более простых процессорах каждая инструкция была эффективно микрокодирована. Например, 6502 выполнило 6502 команды by running a sequence of internal instructions from a PLA decode ROM. Это хорошо работает для не-конвейерного процессора, где порядок использования разных частей ЦП может варьироваться от команды к инструкции.


Исторически был другой технический смысл для «микрокода», что означает что-то вроде внутренних управляющих сигналов, декодированных от слова команды. Особенно в процессоре, таком как MIPS, где слово команды отображается непосредственно на эти управляющие сигналы, без сложного декодирования. (Возможно, это частично неверно, я прочитал что-то вроде этого (за исключением удалённого ответа на этот вопрос), но не смог найти его позже.)

+0

Хотя вы вошли в более подробно, чем я думал, необходимо для OP, мне интересно, что я сказал то же самое и пошел от +2 голосов до -1, пока вы говорите то же самое. Однако вы можете смешивать OP, используя инструкции ассемблера, такие как xchg и div. Это источник его замешательства, которое я пытался облегчить в более простых выражениях для тех, кто просто изучает основы. – Rob

+2

@Rob: ваш ответ утверждает, что некоторые бит декодируемых инструкций * - это * микрокод. Он ничего не говорит о некоторых инструкциях, запускающих поток внутренних инструкций из ПЗУ микрокода, а также других, которые непосредственно влияют на управляющие сигналы (хотя в современных x86-процессорах даже одноуплевочная инструкция все еще проходит через массивную сложность -порядка). Некоторые проекты для некоторых ISA (например, MIPS, я думаю) вообще не используют микрокод, а биты команд могут быть декодированы непосредственно для управления сигналами. –

+0

Потому что я не хотел углубляться в трубу, чем я думал, что он поймет. Я даже упомянул, что это будет сложнее. – Rob

Смежные вопросы