Представьте, что вы хотите выровнять серию инструкций по сборке x86 до определенных границ. Например, вы можете захотеть выровнять петли с 16 или 32-байтной границей или передать инструкции, чтобы они были эффективно размещены в кэше uop или что-то еще.
Самый простой способ добиться этого - однобайтовые инструкции NOP, за которыми следуют многобайтовые NOP. Хотя последний, как правило, более эффективен, ни один из методов не является бесплатным: NOP используют ресурсы для запуска переднего плана, а также учитывают ваш перекрестный предел ширины 1 4 на современном x86.
Другой вариант - как-то удлинить некоторые инструкции, чтобы получить нужное вам выравнивание. Если это делается без введения новых киосков, это кажется лучше, чем подход NOP. Как инструкции могут быть эффективно доработаны на последних процессорах x86?
В идеальном мире методы удлинения будут одновременно:
- Применимо к большинству инструкций
- Возможность удлинения команды переменной величиной
- Не останавливать или замедлять декодеры.
- Эффективно отображаться в кэше uop
Не исключено, что существует единственный метод, который одновременно удовлетворяет всем вышеперечисленным точкам, поэтому хорошие ответы, вероятно, будут касаться различных компромиссов.
1 Предел составляет 5 или 6 на AMD Ryzen.