logo
Архитектура ВС (Карцева А

Структура векторного процессора

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

Рис.29.5. Упрощенная структура векторного процессора

Обработка всех п компонентов векторов-операндов задается одной векторной командой. Общепринято, что элементы векторов представляются числами в фор­ме с плавающей запятой (ПЗ). АЛУ векторного процессора может быть реализо­вано в виде единого конвейерного устройства, способного выполнять все преду­смотренные операции над числами с ПЗ. Более распространена, однако, иная структура, — в ней АЛУ состоит из отдельных блоков сложения и умножения, а иногда и блока для вычисления обратной величины, когда операция деления X/Y реализуется в виде X=(1/Y). Каждый из таких блоков также конвейеризирован.

Кроме того, в состав векторной вычислительной системы обычно включают и ска­лярный процессор, что позволяет параллельно выполнять векторные и скалярные команды.

Для хранения векторов-операндов вместо множества скалярных регистров ис­пользуют так называемые векторные регистры, которые представляют собой со­вокупность скалярных регистров, объединенных в очередь типа FIFO, способную хранить 50-100 чисел с плавающей запятой. Набор векторных регистров (Va, Vb, Vc,...) имеется в любом векторном процессоре. Система команд векторного процессора поддерживает работу с векторными регистрами и обязательно включает в себя команды:

Примером одной из наиболее распространенных операций, возлагаемых на век­торный процессор, может служить операция перемножения матриц. Рассмот­рим перемножение двух матриц А и В размерности 3x3.

Так, элемент сij вычисляется как

Это требует трех операций умножения и (после инициализации сij нулем) трех операций сложения. Общее число умножений и сложений для рассматриваемого примера составляет 9 х 3 = 27. Если рассматривать связанные операции умноже­ния и сложения как одну кумулятивную операцию с + а х b, то для умножения двух матриц пхп необходимо п3 операций типа «умножение-сложение». Вся процеду­ра сводится к получению n2 скалярных произведений, каждое из которых являет­ся итогом п операций «умножение-сложение», учитывая, что перед вычислением каждого элемента сij его необходимо обнулить. Таким образом, скалярное произ­ведение состоит из k членов:

Рис.29.6. Векторный процессор для вычисления скалярного произведения

Векторный процессор с конвейеризированными блоками обработки для вычисления скалярного произведения показан на рис. 29.6.

Векторы А и В, хранящиеся в памяти начиная с адресов adrA и adrB, загружаются в векторные регистры VA и VB соответственно. Предполагается, что конвейерные умножитель и сумматор состоят из четырех сегментов, которые вначале инициа­лизируются нулем, поэтому в течение первых восьми циклов, пока оба конвейера не заполнятся, на выходе сумматора будет 0. Пары (Аi, Вi) подаются на вход умно­жителя и перемножаются в темпе одна пара за цикл. После первых четырех цик­лов произведения начинают суммироваться с данными, поступающими с выхода сумматора. В течение следующих четырех циклов на вход сумматора поступают суммы произведений из умножителя с нулем. К концу восьмого цикла в сегментах сумматора находятся четыре первых произведения A1B1, ..., А4В4, а в сегментах умножителя следующие четыре произведения: А5В5,..., А8В8. К началу девятого цикла на выходе сумматора будет А1В1, а на выходе умножителя — А5В5. Таким образом, девятый цикл начнется со сложения в сумматоре А1В1 и А5В5. Десятый цикл начнется со сложения А2В2 + A6B6 и т. д. Процесс суммирования в четырех секциях выглядит так:

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

Программа для вычисления скалярного произведения векторов А и В, храня­щихся в двух областях памяти с начальными адресами adrA и adrB, соответственно может выглядеть так:

V_load VA, adrA

V_load VB, adrB

V_multiply VC, VA, VB.

Первые две векторные команды V_load загружают векторы из памяти в вектор­ные регистры VA и VB. Векторная команда умножения V_multiply вычисляет произ­ведение для всех пар одноименных элементов векторов и записывает полученный вектор в векторный регистр Vc.

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

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

Как уже упоминалось, элементы векторов в памяти расположены регулярно, и при выполнении векторных операций достаточно указать значение шага по ин­дексу. Существуют, однако, случаи, когда необходимо обрабатывать только нену­левые элементы векторов. Для поддержки подобных операций в системе команд ВП предусмотрены операции упаковки/распаковки (gather/scatter). Операция упа­ковки формирует вектор, содержащий только ненулевые элементы исходного век­тора, а операция распаковки производит обратное преобразование. Обе этих задачи векторный процессор решает с помощью вектора индексов, для хранения которого используется регистр вектора индексов, по структуре аналогичный регистру мас­ки. В векторе индексов каждому элементу исходного вектора соответствует один бит. Нулевое значение бита свидетельствует, что соответствующий элемент ис­ходного вектора равен нулю.

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