2010-01-23 4 views
2

По общему признанию, у меня есть немного глупый вопрос. В принципе, мне интересно, есть ли у некоторые специальные механизмы, предоставляемые процессорами Intel, чтобы эффективно выполнить серию манекенов, т. Е. Инструкций NOP? Например, я мог представить, что может быть своего рода механизмом предварительной выборки, который идентифицирует NOPS, отбрасывает их и пытается извлечь некоторые полезные инструкции. Или эти NOPS посланы к блоку выполнения как нормальные инструкции, а это означает, что я могу обрабатывать примерно 5 NOP, причем каждый цикл (в предположении, что Есть 5 единиц исполнения)Обработка фиктивных операций процессора Intel

спасибо, Reinhard

ответ

1

No. Они декодируются и выполняются как обычные инструкции; существует аппаратная поддержка для удаления ложной зависимости, которая в противном случае была бы введена в регистре EAX для одиночного байта NOP, 0x90 (это действительно xchg eax, eax), но это все.

Ссылка: Intel(R) 64 and IA-32 Architectures Optimization Reference Manual - раздел 3.5.1.8, «Использование NOP».

2

Отбросить их было бы неплохой идеей: они часто используются для оживленного ожидания. Если вы отбрасываете NOP s, вы делаете свою очередь ожидания намного более жесткой, чем она должна быть, и потенциально может привести к большим расходам на связь.

Если вы чувствуете, что NOP s неэффективны, вы можете попробовать HLT, что экономит заряд. Или вы даже можете отправить CPU в состояние ожидания. Однако это имеет смысл только в том случае, если вы хотите «ничего не делать» в течение значительного времени и, как правило, они требуют привилегий сувервизора.

0

Существует очень мало потребности в оптимизации последовательности операций no-ops в архитектуре x86, поскольку она не имеет кодов кодирования различной длины. Вместо многих однобайтовых no-ops можно просто использовать один многобайтовый no-op. Несколько больше работы для декодера, но фактические исполнительные блоки видят только одну инструкцию для выполнения.

+0

Спасибо за ответы. Отличается ли это от точки зрения производительности, используя многословную или многоадресную инструкцию NOP? Или это просто интересно с точки зрения размера кода? – reinhard

+0

Трудно сказать, какие эффекты производительности для многобайтовых NOP. Я не знаю, могут ли они пройти через простой путь декодера (вы, вероятно, можете посмотреть что-то там). Если им требуется сложный путь декодера, и он уже насыщен, может быть предпочтительнее использовать два небольших NOP. –

+0

На самом деле, с длинной поддержкой NOP вы можете сделать один NOP любого размера от 1 до 15 байт. Если вам нужно пропустить большее пространство, вместо JMP вместо NOP. – slacker

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