Реклама:

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

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

Другой вид параллелизма на уровне команд реализуется в процессорах со сверхдлинным командным словом (Very Long Instruction Word, VLIW). В своем первоначальном исполнении VLIW-системы, действительно, отличались длинными словами с командами, обращавшимися к нескольким функциональным блокам. Для примера рассмотрим конвейер, изображенный на рис. 8.2, а. Он включает в себя пять функциональных блоков и способен одновременно выполнять две целочисленные операции, одну операцию с плавающей точкой, одну команду загрузки и одну команду сохранения. В одной команде этой VLIW-системы содержится пять кодов операций и пять пар операндов - по одному коду и одной паре на каждый функциональный блок. С учетом того, что код операции занимает 6 бит, регистр - 5 бит, а ячейка памяти - 32 бита, общая длина команды может достигать 134 бита, что, согласитесь, немало.

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

Параллелизм на уровне команд8

Рис. 8.2. Конвейер процессора (а); последовательность \/1_1\М-команд (б); поток команд с отмеченными связками (е)

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

Нелишне заметить, что параллелизм на уровне команд не является единственно возможной формой низкоуровневого параллелизма. Существует также параллелизм на уровне памяти, предусматривающий одновременное исполнение в памяти множества операций [42].

VLIW-процессор TriMedia

В главе 5 на примере процессора Itanium 2 мы уже сталкивались с архитектурой VLIW. Теперь познакомимся с другим VLIW-процессором - TriMedia производства компании Philips. TriMedia - это встроенный процессор для устройств обработки изображений, а также аудио- и видеустройств, таких как CD-, DVD-и МРЗ-плееры, устройства записи CD и DVD, интерактивные телевизоры, цифровые фотокамеры, видеокамеры и т. д. Учитывая специализацию, нет ничего удивительного в многочисленных отличиях TriMedia от Itanium 2 - универсального процессора для высокопроизводительных серверов.

В состав одной TriMedia-команды может входить до пяти операций. В полностью оптимальных условиях за тактовый цикл запускается одна команда и выбирается пять операций. Номинальная тактовая частота процессора составляет 266 или 366 МГц, но так как за один цикл может выполняться до пяти операций, фактическое быстродействие в пять раз больше. При дальнейшем изложении мы будем исходить из характеристик реализации ТМ3260 процессора. Другие версии TriMedia имеют ряд малозначительных отличий.

Стандартная TriMedia-команда изображена на рис. 8.3. По своему характеру команды варьируются от общераспространенных 8-, 16- и 32-разрядных целочисленных команд до команд с плавающей точкой стандарта IEEE 754 и команд параллельной обработки мультимедиа. Исполнение пяти операций за цикл и наличие команд параллельной обработки мультимедийных данных позволяют процессору TriMedia программно декодировать потоковое цифровое видео, поступающее с видеокамеры, сохраняя исходные размер и частоту кадров.

Параллелизм на уровне команд8

Рис. 8.3. Стандартная ТпМесНа-команда с пятью операциями

В ТпМесНа используется память с байтовой организацией, а регистры ввода-вывода отображаются на пространство памяти. Полуслова (16 бит) и полные слова (32 бит) выравниваются по естественным границам. Порядок следования байтов может быть как прямым, так и обратным - в зависимости от бита слова состояния программы, выставляемого операционной системой. Этот бит определяет механизм передачи данных операций загрузки и сохранения между памятью и регистрами. В процессоре предусмотрена разделенная 8-входовая ассоциативная кэш-память с одинаковой длиной строки (64 байт) в кэшах команд и данных. Емкость кэша команд составляет 64 Кбайт; емкость кэша данных - 16 Кбайт.

Существует 128 универсальных 32-разрядных регистров. Значения регистров 110 и Ш равны аппаратным нулю и единице, соответственно. Остальные 126 регистров функционально эквивалентны и могут применяться для любых целей. Кроме того, предусмотрены четыре специализированных 32-разрядных регистра:

счетчик команд, регистр слова состояния программы и два регистра, связанные с прерываниями. Наконец, один 64-разрядный регистр подсчитывает число циклов процессора с момента последнего сброса. При тактовой частоте 300 МГц полный цикл счетчика составляет 2000 лет.

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

Таблица 8.1. Функциональные блоки ТМ3260 с указанием их количества, задержки и соответствия командным слотам

Блок

Описание

#

Ожидание

Операции с константами

Операции с непосредственной адресацией

Да

Да

Да

Да

Да

АЛУ целочисленных операций

32-разрядные арифметические и логические операции

Да

Да

Да

Да

Да

Сдвиги

Многоразрядные сдвиги

Да

Да

Да

Да

Да

Загрузка и сохранение

Обращения к памяти

     

Да

Да

Умножение целых чисел и чисел с плавающей точкой

32-разрядные операции умножения целых чисел и чисел с плавающей точкой

 

Да

Да

   

АЛУ операций с плавающей точкой

Арифметические операции для чисел с плавающей точкой

Да

   

Да

 

Сравнение чисел с плавающей точкой

Операции сравнения чисел с плавающей точкой

   

Да

   

Извлечение квадратного корня и деления чисел с плавающей точкой

Деление и извлечение квадратного корня для чисел с плавающей точкой

 

Да

     

Блок

Описание

#

Ожидание

1 2

Ветвления

Управление потоком

Да

Да

Да

 

АЛУ цифровой обработки сигналов

Арифметические операции с мультимедийными данными (по два 16-разрядных или по четыре 8-разрядных слова)

Да

Да

 

Да

Умножитель для цифровой обработки сигналов

Умножение мультимедийных данных (по два 16-разрядных или по четыре 8-разрядных слова)

Да

Да

   

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

Функциональный блок операций с константами применяется при выполнении операций с непосредственной адресацией, например, при загрузке числа из поля операции в регистр. АЛУ для исполнения целочисленных операций осуществляет сложение, вычитание, стандартные логические операции, а также операции упаковки и распаковки. Блок операций сдвига может выполнять сдвиги регистра на указанное число битов в обоих направлениях.

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

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

Операции перехода выполняются функциональным блоком ветвлений. За переходом следует фиксированная задержка величиной в 3 цикла, за время которых всегда выполняются 3 команды (то есть до 15 операций). Так происходит даже при безусловных переходах.

Наконец, мы дошли до двух блоков, предназначенных для выполнения специальных мультимедийных операций. Фактически, мультимедийные операции выполняет обработчик цифровых сигналов (Digital Signal Processor, DSP). Следует сразу заметить, что, в отличие от целочисленных операций, основывающихся на арифметике с дополнением до двух, в мультимедийных операциях используется арифметика с насыщением (saturated arithmetic). Если результат операции нельзя выразить из-за переполнения, вместо вызова исключения или возвращения в качестве результата "мусора" подставляется ближайшее корректное число.

К примеру, применительно к 8-разрядным числам без знака в результате сложения 130 и 130 может получиться 255.

Так как некоторые операции и командные слоты несовместимы, зачастую в команду включается меньше пяти операций. Если тот или иной слот не используется, для минимизации потребляемого пространства он подлежит сжатию. Присутствующие в команде операции могут занимать 26, 34 или 42 бита. В зависимости от числа фактически содержащихся в TriMedia-команде операций, ее размер составляет от 2 до 28 байт (включая служебные данные фиксированного размера).

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

Как и в Itanium 2, в TriMedia операции прогнозируются. Каждая операция (за двумя незначительными исключениями) задает регистр, подлежащий проверке перед выполнением этой операции. Если младший бит этого регистра установлен, операция выполняется; в противном случае она пропускается. Каждая из пяти (или менее) операций прогнозируется индивидуально. Вот пример спрогнозированной операции:

IF R2 IADD R4, R5 -> R8

Здесь тестируется регистр R2, и если значение его младшего бита равно единице, содержимое регистров R4 и R5 складывается и сохраняется в R8. Операцию можно сделать безусловной, если в качестве предикатного регистра использовать R1 (его значение всегда равно 1). Регистр R0 (аппаратный ноль) делает операцию пустой.

Мультимедийные операции в TriMedia подразделяются на 15 групп, перечисленных в табл. 8.2. Во многих из этих операций применяется отсечение - методика, в которой операнд "загоняется" в определенный диапазон, исходя из минимальных или максимальных значений операндов вне этого диапазона. Отсечение осуществимо в отношении 8-, 16- и 32-разрядных операндов. К примеру, в результате отсечения значений от 40 до 340 по диапазону от 0 до 255 остаются значения от 40 до 255. Операции отсечения проводятся в группе отсечения.

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

Таблица 8.2. Основные группы специализированных операций в TriMedia

Группа

Описание

Отсечение

Отсечение 4 байт или 2 полуслов

Получение абсолютного значения

Получение абсолютного значения, получение

(DSP)

знака, отсечение

Сложение (DSP)

Сложение значений с учетом знака и отсечением

Вычитание (DSP)

Вычитание значений с учетом знака и отсечением

Умножение (DSP)

Перемножение значений с учетом знака

 

и отсечением

Получение минимума и максимума

Получение минимальной или максимальной

 

из четырех пар байтов

Сравнение

Побайтовое сравнение двух регистров

Сдвиг

Сдвиг пары 16-разрядных операндов

Сумма произведений

Суммирование с учетом знака 8- или

 

16-разрядных произведений

Слияние, упаковка, перестановка

Манипулирование байтами и полусловами

Побайтовое квадратичное усреднение

Побайтовое квадратичное усреднение без учета

 

знака

Побайтовое усреднение

Побайтовое усреднение из четырех элементов

 

без учета знака

Побайтовое умножение

Умножение 8-разрядных значений без учета знака

Оценка движения

Суммирование без учета знака абсолютных

 

значений 8-разрядных разностей со знаком

Разное

Другие арифметические операции

Мультимедийные операции довольно редко выполняются с 32-разрядными целыми числами. Связано это с тем, что изображения обычно строятся в цветовой модели RGB (Red, Green, Blue - красный, зеленый, синий) с 8-разрядными значениями пикселов красного, зеленого и синего цветов. При обработке (например, сжатии) изображения оно выражается тремя компонентами, по одному на каждый цвет (в пространстве RGB), или в логически эквивалентной форме (в пространстве YUV, которое мы обсудим далее). В любом случае, основной объем вычислений проводится для прямоугольных матриц 8-разрядных целых чисел без знака.

Для эффективной обработки таких матриц в TriMedia предусмотрены многочисленные специализированные операции. В качестве простого примера рассмотрим верхний левый угол матрицы 8-разрядных значений, сохраненной в памяти с прямым порядком следования байтов (рис. 8.4, а). Блок 4 х 4 в этом углу содержит 16 8-разрядных значений от А до Р. Предположим, что в результате транспонирования изображения получилась матрица, изображенная на рис. 8.4, б. Как достигается этот результат?

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

Параллелизм на уровне команд8

Рис. 8.4. Матрица 8-разрядных элементов (а); транспонированная матрица (б); исходная матрица, перенесенная в четыре регистра (в); транспонированная матрица в четырех регистрах (г)

Есть и другой способ. Сначала выполняются четыре операции, каждая из которых загружает одно слово в четыре разных регистра - от К2 до 115 (как показано на рис. 8.4, в). Затем с помощью операций маскирования и сдвига четыре получившихся слова объединяются, и формируется желаемый результат (рис. 8.4, г). В конце слова сохраняются в памяти. Несмотря на значительное сокращение числа обращений к памяти (с 24 до 8), эффективность этого метода не высока из-за маскирования и сдвига - для извлечения и размещения всех байтов в нужных местах требуется слишком много операций.

В ТпМесИа реализован более удачный метод. Во-первых, четыре слова размещаются в регистрах. При этом результат формируется не маскированием и сдвигами, а специализированными операциями для извлечения и размещения байтов в регистрах. Таким образом, для транспонирования изображения достаточно восьми специальных мультимедийных операций и такого же числа обращений к памяти. Код начинается с двух операций загрузки в сегменты 4 и 5 для размещения слов в регистры К2 и 113, за которыми следуют аналогичные операции для загрузки в регистры К4 и 115. Команды, в составе которых находятся эти операции, могут задействовать сегменты 1, 2 и 3 для любых других целей. После загрузки всех слов 8 специальных мультимедийных операций вместе с двумя операциями сохранения можно упаковать в две команды, формирующие выходные данные. В конечном счете, требуются всего 6 команд, причем 14 из 30 слотов остаются доступными для других операций, а значит, при решении поставленной задачи число слотов соответствует примерно трем командам. Другие мультимедийные операции столько же эффективны. Благодаря этим операциям, а также разделению команды на пять слотов, процессор ТпМесНа оказывается высокоэффективным инструментом обработки мультимедийных данных.

Внутрипроцессорный параллелизм || Оглавление || Внутрипроцессорная многопоточность