Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M8 / Исполнительная среда Itanium.doc
Скачиваний:
41
Добавлен:
16.04.2013
Размер:
340.48 Кб
Скачать

3.4. Рассмотрение последовательности инструкций

Код Itaniumсостоит из последовательности инструкций и остановок упакованных в связки. Исполнение инструкций упорядочено так:

  • Связки упорядочены от меньших адресов памяти к большим. Инструкции в связках с меньшими адресами памяти рассматриваются как предшествующие инструкциям в связках с большими адресами. Байты каждой связки упорядочены в памяти по убыванию (поле шаблона содержится в нулевом байте связки).

  • Внутри связки (как это видно на рис.3.15), инструкции упорядочены от слота инструкции 0 к слоту инструкции 2.

Выполнение инструкций состоит из четырех фаз:

  1. Чтение инструкций из памяти (фаза fetchвыборка)

  2. Чтение архитектурного состояния, если необходимо (фаза read)

  3. Исполнение заданной операции (фаза execute)

  4. Обновление архитектурного состояния, если необходимо (фаза update)

Группа инструкций– это последовательность инструкций начинающаяся от заданного адреса связки и номера слота и включающая все инструкции с последовательно увеличением номеров слотов и адресов связок до первой остановки, сделанного перехода, ошибки “BreakInstruction” происшедшей приbreak.bили ошибки «Запрещенная операция» происшедшей при резервировании, либо если в коде операции типа «B» закодированоPR[qp]=1. Для инструкций в группе инструкций имеется ясно определенное правило: они должны встречаться в порядке и в зависимости от требований описанных далее.

С целью ясности не следует заканчивать группы инструкций:

  • Инструкциями перехода отличными от break.b (break.f, break.i, break.m, break.x)

  • Инструкциями проверки (chk.s, chk.a, fchkf)

  • Инструкциями rfi не следующими за остановкой

  • Инструкциями brl не следующими за остановкой

  • Прерываниями отличными от ошибки “Break Instruction” происшедшей при break.b или ошибки “Illegal Operation” происшедшей при резервировании, либо если PR[qp]=1 закодировано в коде операции типа «B».

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

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

  • Нет никаких приоритетных отношений между фазой fetch (выборки инструкции) и фазами read, execute, update относящимися к любой предшествующей инструкции. Инструкции sync.i и srlz.i могут быть использованы для принудительных последовательных отношений между фазой выборки всех динамически завершенных инструкций и фазой обновления всех динамически предшествующих инструкций.

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

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

  • В пределах группы инструкций, каждая инструкция будет вести себя так, как если бы ее чтение памяти и состояния ALAT, произошли бы после модификации памяти и состояния ALAT всех предшествующих инструкций в этой группе инструкций.

  • В пределах группы инструкций, каждая инструкция будет вести себя так, как если бы ее чтение состояния регистра произошло до обновления состояния регистра любой другой инструкцией (предыдущей или последующей) в этой группе инструкций, кроме случаев, отмеченных в Зависимостях по регистрам и Зависимостях по памяти описанных ниже.

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

  • Зависимости по регистрам. В группах инструкций, регистровые зависимости типа RAW (чтение после записи) и WAW (запись после записи) не разрешены (исключения отмечены ниже, в разделах 3.4.1 «Специальные случаи зависимости RAW» и 3.4.2 «Специальные случаи зависимости WAW»). Регистровые зависимости WAR (запись после чтения) разрешены (исключения отмечены ниже, в разделе 3.4.3 «Специальные случаи зависимости WAR»).

Эти ограничения зависимости применяются и для явных регистровых обращений (из операндов инструкций), и для неявных регистровых обращений (некоторые инструкции неявно обращаются к прикладным и управляющим регистрам). Предикатный регистр PR0 является исключением для этого ограничения регистровой зависимости, поскольку запись в PR0 игнорируется, а чтение всегда возвращает 1.

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

  • Зависимости по памяти. В группах инструкций, разрешены зависимости по памяти RAW, WAW, WAR, а также зависимости ALAT. Загрузка будет наблюдать результаты самого последнего сохранения по тому же адресу памяти. Если многократные сохранения присутствуют в одной и той же группе инструкций, то память будет содержать результат самого последнего запоминания после выполнения группы инструкций. Сохранение после загрузки по тому же самому адресу не будет затрагивать данные, загруженные загрузкой. Инструкции предварительной загрузки, проверки загрузки, проверки предварительной загрузки, запоминания и семафор памяти неявно обращаются к ALAT. Зависимости RAW, WAW, WAR и ALAT разрешены в пределах группы инструкций и ведут себя точно также, как это было описано для зависимостей по памяти.

Результирующий эффект ограничений зависимости описанных выше сводится к тому, что процессор может выполнять все (или любое подмножество) инструкций в пределах правильной группы инструкций одновременно или последовательно с одним и тем же конечным результатом. Если эти ограничения зависимости не выполняются, то поведение программы не определено (см. ниже раздел 3.5 «Неопределенное поведение»).

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

Последовательность инструкций, вытекающая из правил заявленных выше называется последовательным выполнением (“sequentialexecution”).

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

IP– это специальный ресурс. Чтение и запись вIPвыполняется последовательно, а не параллельно. ДляIPразрешены зависимостиRAW, а чтение получитIPсвязки, который его (чтение) содержит. Так, каждая связка, выполняемая параллельно, логически читаетIP, увеличивает его и записывает обратно. Кроме того, разрешена зависимостьWAW.

Игнорируемые прикладные регистры не является исключением для целей проверки зависимости. Зависимости RAWиWAWне разрешены для игнорируемых прикладных регистров.

Детальнее о ресурсной зависимости см. главу 5 «Ресурсы и семантики зависимости» в третьем томе.

Соседние файлы в папке M8