2017-02-10 25 views
4

Я знаю, что некоторые архитектуры с маленькими концами, такие как Intel x86, допускают смещение данных. Конечно, интуитивно говоря, несоосность не очень умна, так как она может ухудшить производительность (не обязательно для современных чипов, защищенных here). Таким образом, неприсоединенные доступа к данным, возможно, не очень хорошие, но они легитимны в некоторых архитектурах. Хорошо.Сборка. Должны ли быть выровнены инструкции даже в архитектурах, которые позволяют смещать данные?

До недавнего времени я считал, что то же самое относится к нестандартным инструкциям: если данный процессор обрабатывает несоосность в данных, что может помешать ему сделать то же самое с кодом? Тем не менее, в книге Линды Null (в here) сказано довольно ясно обратное:

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

С другой стороны, многие книги из книг Google, естественно, касаются неглавных инструкций. Итак, я задаю следующие вопросы:

  1. Невыравнимые инструкции, разрешенные в некоторой архитектуре или нет?
  2. - выравнивание требуется для любое архитектуры большого конца? Я понимаю, что несоосность возможна только на небольших процессорах.

Я прав?

Надеюсь, вы можете помочь мне прояснить эти вопросы для меня. Большое спасибо, ребята!

+1

Этот вопрос трудно ответить, поскольку платформа, где инструкции могут быть неравнозначными, также может рассматриваться как платформа, где требование выравнивания для инструкций равно 1. Выравнивание для инструкций может быть меньше длины инструкции; например, на большом значении ARM, инструкции длиной 32 бит (например, 'bl') должны быть выровнены только с 16 бит. – fuz

+1

Процессоры могут обрабатывать несвязанные инструкции так же, как и данные. Некоторые RISC просто пропускают младшие разряды в операнде команд передачи управления, потому что они имеют ограниченное пространство. Кроме того, блок выборки может отличаться от (более сложного) блока нагрузки. Поскольку код создается для конкретной архитектуры (в то время как данные являются общими), наложение ограничений на него является разумным и не слишком обременяет кого-либо. –

+4

Архитектуры с инструкциями переменной длины, такими как x86 обычно (всегда?), Позволяют выполнять неверные инструкции, поскольку в противном случае они эффективно отменяют преимущества переменной длины. Тем не менее, они по-прежнему любят такие вещи, как цепочки ветвей, особенно петли, для выравнивания. – Jester

ответ

2

Нет никакого общего ответа, вы должны смотреть на каждый дизайн отдельно. Также, что этот дизайн должен сказать о endiannes. Я не вижу, как вы пытаетесь подключить точки между контентом и выравниванием. Есть очень популярные архитектуры и глядя на каждого из них изолированно, либо нет выбора, либо популярного выбора для endiannes, и полностью независимы от endianess внутри этой архитектуры, это его правила выравнивания.

x86 по определению представляет собой 8-разрядный набор инструкций, который начинался с шины 8 или 16 бит, в зависимости от того, что вы купили или подключили, поэтому по определению нет выравнивания, а также по определению является переменной длиной набор команд, изменяющийся по количеству отдельных байтов, у которого нет правил выравнивания. И в результате своей истории у него нет правил выравнивания данных, что еще больше ухудшает его производительность.

Возьмите MIPS, к сожалению, я не знаю, какая традиционная энтузиазм, которую я угадываю, большой, но люди называют ее би-endian, что всегда является чем-то, что должно вызывать тревоги. Но здесь снова энсианс и выравнивание не имеют оснований для объединения.MIPS как концепция образования и остается тем, что, а также физически построенные или, по крайней мере, ядра, которые вы можете купить для своих собственных проектов, были о производительности, боли программиста и силовом выравнивании хорошо сочетаются с этим. Естественно, что выборки команд и чтения данных имеют смысл следовать тем же правилам, набор команд был/является 32-битными инструкциями, и они идеально выровнены.

ARM, с раннего времени принудительное выравнивание руки, но даже с ARM7TDMI вы можете отключить это, и, несмотря на то, что ARM ARM сказал, что поведение было предсказуемым, просто странно (вращайтесь внутри слова, а не перетекаете в другое слово). Из-за ленивых программистов благодаря x86, они более терпимы к допуску неравномерной передачи, отключив ловушку отказа, а результат - то, что можно было бы ожидать, перейдя на следующее слово. Здесь снова упоминается как двухрядная машина, но разумное решение идет немного до конца, инструменты и все имеют смысл, их консистенция изменилась с BE-32 на BE-8 в armv6, что еще больше вызвало боль большого эндиана, просто держитесь подальше. Исключением является сильная марка, которая стала xscale, которая, как я думаю, купила (или была ли это кавицей?), Которая была дефолтом для большого эндиана (BE-32) и была королевской болью для получения рабочих инструментов, но, несмотря на то, что она могла бежать, большой. Я хочу помнить, что конструкции рукоятки требуют выравнивания для выборки команд, где данные не должны быть, если вы отключите эту ошибку. И инструкции всегда немного независимы от больших/маленьких настроек. у них также есть 16-битный набор инструкций, а затем расширения большого пальца2, которые являются переменными длиной большого пальца, и они не должны быть выровнены, они представляют собой переменную длину 16-разрядных инструкций вместо того, чтобы думать о них как 32-битных инструкциях. Декодер должен проверять первую 16-разрядную инструкцию, чтобы понять, какая из них следует. Также как x86.

RISC склонился к производительности над CISC, поэтому конструкции RISC имеют правила выравнивания, но нет причин, по которым кто-то не мог сделать полностью неуравновешенный RISC или полностью выровненный CISC. Не позволяйте себе попадать в ловушку обобщения любого из этого, вы должны смотреть на каждую архитектуру и/или ядро ​​отдельно, даже внутри поставщика или набора команд (xscale vs ARM7TMDI).

Выравнивание всегда влияет на производительность, сегодня, вчера и завтра на всех системах. Иногда эффект меньше или больше, но вы не можете волшебным образом выращивать кремний или провода на ходу на лету в своем дизайне, поэтому вы не можете просто изменить, как работает автобус, и что может и не может вписаться в один такт. Таким образом, нет новой технологии, если она строго ограничена байтовыми шинами или битными шинами, которые могут отменить удары производительности выравнивания. И возврат к 8-битным шинам для основного интерфейса не быстрее, шире быстрее на кристалле. Выключение микросхемы не быстрее, но более управляемо, поэтому SATA выигрывает над PATA. просто потому, что мы не можем поддерживать много высокоскоростных сигналов параллельно, им приходится сериализовать их (может иметь много отдельных последовательных интерфейсов, которые работают вместе, pci, ethernet). Таким образом, выравнивание основных архитектур cpu всегда будет иметь значение, поскольку мы используем двоичные состояния и фиксированное количество бит на шину.

+0

old_timer, , вы казались настолько настойчивыми в своем ответе, что я был вынужден перечитать, что пишет Джулия Нулл в своей книге: «Большинство архитектур, использующих схему большого конца, не позволяют писать слова на не-словном адресе границы ... Это пространство для отходов. Маленькие архитектуры endian, такие как Intel, позволяют читать и записывать нечетные адреса, что значительно упрощает программирование на этих машинах ». Итак, действительно, она не заявляет, что для больших эндианских архитектур требуется выравнивание памяти. Но согласны ли вы с тем, что она заявила, что все небольшие архитектуры endian поддерживают неприсоединившиеся обращения? –

+0

должны быть осторожны со словами типа «все», потому что только один человек может его найти или создать, а затем утверждение неверно. Дело в том, что это не имеет значения. Изучите архитектуру, которую вы используете или заинтересованы в использовании, вам нужно в конечном итоге, если вы в конечном итоге ее используете ... Это похоже на общие вещи, которые люди пытаются использовать между гарвардской архитектурой и фон Нейманом ... –

+0

комментарий о трату пространства также древний, уже не верный ... –