logo
Методичка

6.5 Условное выполнение команд в vliw-процессорах

Альтернатива суперскалярной обработке – длинное командное слово (VLIW – Very Long Instruction Word). Использование этого метода предполагает задание в командном слове совокупности параллельно выполняемых команд. Подготовкой таких программ занимается компилятор.

В рамках архитектуры IА-64, разрабатываемой Intel и HP, организация длинных команд базируется на связках (bundle) команд, формируемых из трех команд и специального поля шаблона (T, template).

Возможные варианты связки из трех команд:

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

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

Формат команды IА-64 включает: код команды, три 7-разрядных поля операндов, 1 приемник и 2 источника (операндами могут быть только регистры), особые поля для арифметических операций с плавающей и фиксированной точками, а также специальное 6-разрядное предикатное поле.

Эффективность загрузки функциональных устройств в процессорах с длинным или очень длинным командным словом (LIW/VLIW – long/very long instruction word) достигается за счет механизма условного (предикативного) исполнения команд и предвыборки команд.

Механизм условного исполнения команд базируется на введении в команды специального предикатного поля. Условное выполнение команд исключает необходимость использования команд условных переходов. Вместо команды перехода и двух альтернативных ветвей, одна из которых выполняется в зависимости от значения предиката команды перехода, отдельной специальной командой вычисляется тот же предикат, что и в команде перехода, и его значение сохраняется в специальном предикатном регистре. Команды одной альтернативной ветви используют значение U вычисленного предиката, а команды другой альтернативной ветви используют предикат со значением "не U". Команды обеих ветвей запускаются на исполнение, но результативное исполнение будет только у команд со значением предиката "истина". Подобные действия по замене команд перехода на команды условного выполнения носят название "преобразование if" и выполняются компилятором. В листинге 6.1 слева приведен фрагмент программы с использованием команд перехода, а справа соответствующий ему преобразованный фрагмент программы с применением условных команд и команд вычисления предикатов.

Листинг 6.1

if (а < 10) pred_l: р1(-U), р2(U), а, 10

с = с+1 аdd с, с, 1 (р2)

else if (b > 20) pred_g: р3(-U), р4(U), b, 20 (р1)

d = d+1 аdd d, d, 1 (р4)

else е= е+1 аdd е, е, 1 (р3)

Соответствующая граф-схема фрагмента программы представлена на рис. 6.5.

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

Одним из приемов борьбы с удлинением командного слова служит ограничение типов команд, допускающих условное исполнение только теми командами, форматы которых имеют поля для размещения предиката. Например, допускается условное исполнение только команд пересылки МОV. Для этого вводится специальный формат CMOV условной пересылки.

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

Конечно, предпочтительным использованием условных команд служит распараллеливание коротких альтернативных ветвей.

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

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