Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Архитектура часть 4..doc
Скачиваний:
18
Добавлен:
16.04.2013
Размер:
430.08 Кб
Скачать

4.5.1. Поддержка модульно планируемых циклов.

Поддержка программной конвейерной обработки циклов обеспечивается с помощью ротации регистров и специальных типов циклических переходов. Программная конвейерная обработка циклов организована аналогично аппаратной конвейерной обработке функционального устройства. Тело цикла разделено на несколько стадий, а в каждой стадии может быть несколько инструкций или не быть ни одной. Модульно планируемые циклы имеют три фазы: пролог, ядро и эпилог. В течение фазы пролога, при каждом проходе, запускаются новые циклические итерации (заполнение программного конвейера). В течение фазы ядра конвейер полон. Новая итерация начинается, а другая завершается при каждом проходе. В течение фазы эпилога, не начинается никаких новых итераций, а предыдущие итерации завершаются (освобождение программного конвейера).

Предикат назначается для каждой стадии, для управления активацией инструкций на этой стадии (этот предикат называется «предикат стадии»). Для поддержки конвейерного эффекта для предикатов и регистров в стадии программного конвейерного цикла, задаются для ротации, области фиксированного размера предикатных регистров (PR16-PR63) и регистров с плавающей точкой (FR32-FR127), а также область программируемого размера из файла основных регистров. Размер ротационной области в файле основных регистров задается непосредственно в инструкцииalloc. Это непосредственное значение должно быть нулевым, либо кратным 8. Область ротации основных регистров определена так, что она начинается отGR32 и накладывается на локальную и выходную области, в зависимости от их относительных размеров. Предикаты стадии располагаются в ротационной области файла предикатных регистров. Для счетных циклов,PR16 архитектурно определен как предикат первой стадии, а предикаты последующих стадий распространяются в предикатные регистры с большими номерами. Дляwhile-циклов предикат первой стадии может быть любым ротационным предикатом, предикаты последующих стадий распространяются в предикатные регистры с большими номерами. Программное обеспечение должно инициализировать ротационные предикаты стадий до входа в цикл. Инструкцияallocне может изменять размер ротационной части окна стека регистров, если не все базы ротационных регистров (rrb) вCFMявляются нулями. Все поляrrbмогут быть обнулены с помощью инструкцииclrrrb. Формаclrrrb.prможет использоваться для очистки толькоrrbдля предикатных регистров. Инструкция clrrrb должна быть последней в группе инструкций.

Регистры ротируются в сторону больших номеров, образуя замкнутое кольцо. Например, значение в регистре Х после одной ротации будет помещено в регистр Х+1. Если Х – самый последний доступный ротационный регистр, то его значение будет перенесено в самый первый доступный ротационный регистр. Ротация осуществляется путем переименования номеров регистров на основании значения базы ротации регистров (rrb) содержащейся вCFM. Для каждого из трех файлов ротационных регистров задаютсяrrbнезависимо: для основных регистров –rrb.gr, для регистров с плавающей точкой –rrb.fr, а для предикатных регистров –rrb.pr. Основные регистры ротируются только тогда, когда размер области ротации не равен нулю. Регистры с плавающей точкой и предикатные регистры ротируются всегда. Когда происходит ротация, то два или все триrrbсинхронно декрементируются. Каждое полеrrbдекрементируется модульно, в соответствии с размерами ротационных областей (например, 96 дляrrb.fr). В остальном, работа механизма переименования ротационных регистров не видима для программы. Список инструкций модифицирующихrrbдан в табл.4.25.

Табл.4.25. Инструкции, модифицирующие поля rrb

Мнемоника

Действие

clrrrb

Очищает все rrb

clrrrb.pr

Очищает rrb.pr

br.call, brl.call

Очищает все rrb

cover

Очищает все rrb

br.ret

Восстанавливает CFM.rrbизPFM.rrb

rfi

Восстанавливает CFM.rrbизIFM.rrb,еслиIFM.v==1

br.ctop, br.cexit, br.wtop, br.wexit

Декрементирует все rrb

Есть две категории переходов в программных конвейерных циклах: счетныйи типаwhile. Обе категории имеют по две формыtopиexit. Вариант “top” используется тогда, когда условие выхода из цикла расположено ниже тела цикла. Принятый переход продолжит цикл, а не принятый переход приведет к выходу из цикла. Вариант “exit” используется тогда, когда условие выхода из цикла расположено не в подножии цикла, а где-то в другом месте. Здесь, не принятый переход приведет к продолжению цикла, а принятый переход приведет к выходу из цикла. Кроме того, вариант “exit” используется для промежуточных точек в развернутом конвейерном цикле.

Условие перехода в переходе счетного цикла задается указанием типа счетного цикла (ctopилиcexit), значением прикладного регистра счетчика цикла (LC) и значением прикладного регистра счетчика эпилогов (EC). Заметим, что переходы счетных циклов не используют вычисление предикатов. РегистрLCинициализируется значением на единицу меньшим, чем количество итераций счетного цикла, аECинициализируется числом стадий, на которые делится тело цикла. ПокаLCбудет больше нуля, направление перехода будет продолжать цикл,LCбудет декрементироваться, регистры будут ротироваться (поляrrb- декрементируются), аPR16 будет устанавливаться в 1 после ротирования. (При каждом циклическом переходе, вPR63 было некое значение, а после ротации это значение окажется вPR16).

Выполнение перехода счетного цикла при LCравном нулю сигнализирует о начале эпилога. Пока выполняется эпилог и покаECбольше 1, направление перехода будет продолжать цикл,ECбудет декрементироваться, регистры будут ротироваться, а после ротацииPR16 будет устанавливаться в 0. Выполнение перехода счетного цикла приLCравном нулю иECравном единице сигнализирует об окончании цикла; направление перехода будет на выход из цикла,ECбудет декрементироваться, регистры будут ротироваться, а после ротацииPR16 будет установлен в 0. Если при выполнении перехода счетного цикла, иLCравно 0, иECравно 0, то направление перехода будет на выход из цикла.LC,ECи все поляrrbне будут изменяться (нет ротации), аPR63 будет установлен в 0.LCиECмогут оказаться равными нулю при некоторых типах оптимизации, разворачивания программных конвейерных циклов, если адресат переходаcexitустановлен на следующую последовательную связку инструкций, а счетчик прохода циклов (trip) не является равномерно повторяющимся в процессе развертки.

Направление циклического перехода типа whileзадается указанием типа циклаwhile(wtopилиwexit), значением вычисленного предиката и значениемEC. Циклические переходы типаwhileне используютLC. Пока вычисленный предикат равен 1, направление перехода будет продолжать цикл, регистры будут ротироваться, а после ротацииPR16 будет устанавливаться в 0. Пока вычисленный предикат равен 0 и покаECбольше 1, направление перехода будет продолжать цикл,ECбудет декрементироваться, регистры будут ротироваться, а после ротацииPR16 будет устанавливаться в 0. Вычисленный предикат является единицей в течение стадии ядра и – нулем в течение стадии эпилога. В течение пролога вычисленный предикат может быть либо 0, либо 1, в зависимости от схемы используемой программой конвейеризацииwhile-цикла. Выполнение переходаwhile-цикла со значением вычисленного предиката равным 0 иECравном единице, сигнализирует об окончании цикла; направление перехода будет на выход из цикла,ECбудет декрементироваться, регистры будут ротироваться, а после ротацииPR16 будет установлен в 0. Если при выполнении переходаwhile-цикла со значением вычисленного предиката равным 0, иECравно 0, то направление перехода будет на выход из цикла.ECи все поляrrbне будут изменяться (нет ротации), аPR63 будет установлен в 0.

Для while-циклов, инициализацияECзависит от схемы используемой программой конвейеризацииwhile-цикла. Часто первое правильное условие для переходаwhile-цикла не вычисляется в течение нескольких стадий пролога. Поэтому программные конвейеры дляwhile-циклов, часто имеют несколько спекулятивных стадий пролога. В течение этих стадий, вычисленный предикат может быть установлен в 0 или 1, в зависимости от схемы используемой в программе. Если вычисленный предикат равен единице в течение пролога, тоECбудет декрементирован только в течение фазы эпилога и инициализируется в значение на единицу большее, чем количество стадий эпилога. Если вычисленный предикат равен нулю в течение спекулятивных стадий пролога, тоECбудет декрементироваться в течение этих частей пролога, а инициализируемое дляECсоответственно увеличивается.

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