Принципы векторной обработки данных

При векторной обработке (рис. 4) командное слово i считывается из памяти команд MI в регистр команд векторного процессора. Отличительной особенностью векторного процессора является наличие в его системе команд векторных команд и средств поддержки их реализации.

Рис. 4. Схема векторной обработки данных

Векторные команды предназначены для выполнения операций над векторными данными, которые представляют собой e -элементные наборы чисел, размещенные в памяти с определенной регулярностью и над которыми должны выполняться одни и те же действия (модель программирования ОКМД – одна команда, множество данных). Векторные данные имеют особо важное значение для реализации высокоскоростной числовой обработки, т. к. с помощью одной команды можно указать операцию над множеством данных, а в процессоре – приводить в действие различные механизмы параллельной обработки. В зависимости от типа и производителя процессоров указание командным словом векторных данных осуществляется по-разному, но при этом в любом случае должны быть заданы: адрес a базы векторных данных; значение приращения адреса d между элементами векторных данных; длина вектора e.

Для хранения считываемых из памяти векторных данных процессор должен иметь регистры, емкостью достаточной для вектора длины e. Такие регистры называются векторными. В зависимости от процессора количество векторных регистров в них варьируется, а также они сами могут быть различными по ёмкости и по типу загрузки/выгрузки в/из них информации из/в памяти данных MD. По последнему из названных критериев векторные регистры могут быть однопортовыми, в которых нельзя одновременно и записывать данные и читать их, или двухпортовыми, в которых можно одновременно и записывать данные и читать уже записанные данные из них (но разные элементы вектора).

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

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

Далее покажем пример выполнения векторными процессорами двух типов цикла программы, рассмотренной выше для суперскалярного процессора. Программы для векторных процессоров представляют собой последовательность из 18 векторных команд (см. таблицы 2, 3), каждая из которых будет исполнена только 1 раз. Необходимо обратить внимание на различный порядок следования команд в программах процессоров двух типов ввиду разных механизмов доступа в векторные регистры. Написание оптимальной программы для конкретного типа процессора является важной задачей на подготовительном этапе выполнения расчетного задания.

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

Пример 1. Векторный процессор типа 1 имеет один конвейер команд, 8 однопортовых векторных регистров, векторные исполнительные устройства – сумматор, умножитель, делитель конвейерного типа. Загрузка векторных регистров может осуществляться параллельно с выполнением арифметических операций, не связанных с загружаемым регистром. Программа для него представлена в табл. 2, где VELD DATA,VRX – поэлементная загрузка векторных данных (вектора) DATA в векторный регистр VRX; VEAD VRX,VRY → VRZ – поэлементное сложение содержимого векторного регистра VRX с содержимым векторного регистра VRYи сохранение результата в векторном регистре VRZ; VESD VRX,VRY → VRZ – поэлементное вычитание из содержимого векторного регистра VRX содержимого векторного регистра VRYи сохранение результата в векторном регистре VRZ; VEMD VRX,VRY → VRZ – поэлементное умножение содержимого векторного регистра VRX на содержимое векторного регистра VRYи сохранение результата в векторном регистре VRZ; VEDD VRX,VRY → VRZ – поэлементное деление содержимого векторного регистра VRX на содержимое векторного регистра VRYи сохранение результата в векторном регистре VRZ; VESTD VRX – поэлементное сохранение содержимого векторного регистра VRX в памяти данных. Отметим также, что до выполнения любой операции над содержимым векторных регистров необходимые для этого данные (вектора) в них уже должны быть загружены.

Таблица 2

Программа для векторного процессора типа 1

Номер векторной команды Команда
  VELD X,VR1
  VELD Q,VR2
  VELD P,VR3
  VELD Y,VR4
  VESD VR1,VR2 → VR5 =(X-Q)
  VEMD VR3,VR4 → VR6 =(P*Y)
  VELD W,VR7
  VELD V,VR8
  VESD VR7,VR8 → VR1 =(W-V)
  VELD Z,VR2
  VELD U,VR3
  VEDD VR2,VR5 → VR4 =Z/(X-Q)
  VEDD VR6,VR3 → VR7 =(P*Y)/U
  VELD L,VR8
  VEMD VR1,VR8 → ∑
  VEAD *,VR4 → VR5 =Z/(X-Q)+L*(W-V)
  VEAD VR5,VR7 → VR3 =S
  VESTD VR3

Курсивом в табл. 2 указаны результаты выполнения операций слева от стрелки, сохраняемые в регистрах, указанных справа от неё.

Синтаксис команды 15 означает, что в ней используется принцип зацепления: результат исполнения команды не будет сохранен в каком-либо векторном регистре, а будет конвейерно поэлементно передаваться напрямую в исполнительное устройство, реализующее следующую по счёту команду (здесь – сумматор для команды 16), что позволяет ещё более ускорить вычисления.

Выполнение любой векторной команды разбивается на 7 стадий:

В – выборка команды из памяти MI;

H – проверка на бесконфликтность (виды конфликтов будут описаны ниже в комментариях к временной диаграмме);

К – выдача команды;

D – дешифрация команды;

G – подготовка параметров: занесение значений e и d в соответствующие регистры;

L – настройка конвейера;

E – поэлементное выполнение операции.

Пусть стадии B, Н, К, D требуют для своего исполнения 1 МТ каждая, G и L – по 2 МТ, загрузка из памяти или сохранение в память 1 элемента вектора занимает 1 МТ, сложение/вычитание двух элементов векторов – 1 МТ, умножение – 3 МТ, деление – 6 МТ. Это предполагает, что АЛУ векторного процессора такое же как было применено в суперскалярном, рассмотренном выше.

Временная диаграмма занятости исполнительных устройств и регистров векторного процессора типа 1 изображена на рис. 5 для вектора длины N=10.

Здесь MD1 – MD5 – модули 1-5 памяти данных; VR1-VR8 – векторные регистры; SUM, MUL, DIV соответственно сумматор, умножитель, делитель. Числа над стадиями команд означают номер операции из табл. 2, к которой они относятся. Стрелками указывается применение принципа зацепления. Штриховкой отмечено смещение начало стадии L для организации зацепления.

На основании временной диаграммы рис. 5 можно вычислить время выполнения цикла на векторном процессоре типа 1 Твек.1.

Твек.1 = 10+N+14+N+8+N+11+N+8+N+10+N+7+N+8+N = 74+8N (МТ).

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

Конфликты могут быть следующими:

1) занятость модулей памяти данных;

2) отсутствие или загрузка данных в однопортовый векторный регистр, необходимых для начала текущей операции (например, при выполнении команд 5, 6, 9, 12, 15, 17, 18 рис. 5);

3) занятость векторного регистра: необходимость сохранения данных в регистр, из которого идёт чтение;

4) занятость исполнительного устройства (например, при выполнении команды 13 рис. 5).

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

Программа для векторного процессора типа 2 представлена в табл. 3.

Таблица 3

Программа для векторного процессора типа 2

Номер векторной команды Команда
  VELD P,VR1
  VELD Y,VR2
  VELD U,VR3
  VEMD VR1,VR2 → /
  VEDD *,VR3 → VR4 =(P*Y)/U
  VELD X,VR5
  VELD Q,VR6
  VESD VR5,VR6 → VR7 =(X-Q)
  VELD Z,VR8
  VEDD VR8,VR7 → ∑
  VEAD /,VR4 → VR1 =Z/(X-Q)+(P*Y)/U
  VELD W,VR2
  VELD V,VR3
  VESD VR2,VR3 → VR5 =(W-V)
  VELD L,VR6
  VEMD VR6,VR5 → ∑
  VEAD *,VR1 → VR8 =S
  VESTD VR8

Временная диаграмма занятости исполнительных устройств и регистров векторного процессора типа 2 изображена на рис. 6 для длины вектора N=10.

На её основании можно вычислить время выполнения цикла на векторном процессоре типа 2 Твек.2.

Твек.2 = 16+N+11+N+11+N = 38+3N (МТ).

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

Сравнивая зависимости Тс/скал.(N), Твек.1(N), Твек.2(N) от числа итераций цикла, можно найти значения N, при которых выгодно и оправдано применение того или иного типа процессора.


Рис. 5. Временная диаграмма занятости исполнительных устройств и регистров векторного процессора с однопортовыми регистра


Рис. 6. Временная диаграмма занятости исполнительных устройств и регистров векторного процессора с двухпортовыми регистрами



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: