Сложение матриц


Заданы 2 матрицы А и В. Вычислить матрицу С, которая равна поэлементной сумме этих матриц: С=А+В. Элемент ij матрицы С есть сумма соответствующих элементов матриц А и В: cij=aij+bij , где i=1..m, j=1…n.

a) Пусть имеется mxn матричных процессоров. Элементы матриц А и В записываются в соответствующие ПЭ. Номер ПЭ соответствует индексу элементов матриц.

b) Управляющей процессор передает на все ПЭ одну и туже команду: Сложить матрицы А и В и результат поместить в С: ADD A,B,C. Что означает: элемент с адресом А, каждого ПЭ, складывается с адресом В в локальной памяти этих ПЭ и результат записывается в ячейку С в локальной память каждого ПЭ. Вся локальная память ПЭ имеет одну и туже адресацию. Значит если выдать одну и туже команду в которой будут логические адреса или адреса локальной памяти, а предварительно по этим адресам занесены значения элементов матрицы А и В, в этом случае, выдав одну команду на процессорную матрицу, мы получаем результаты в соответствующих, по номеру одинаковых, ячейках локальной памяти.

c) При меньшем числе ПЭ можно задачу декомпозировать на несколько подзадач. Например, если использовать линейную структуру, то выполнить сложение по строкам – 1-ой строки, 2-ой строки и т.д. Понятно, что исходные данные могут быть заранее записаны в локальную память. Там только будут изменяться начальные адреса.

d) При наличии индексных регистров в ПЭ-х управляющий процессор может передать одну команду сложения с указанием индекса( индексного регистра) и числа операций. Это означает, что команда приобретает вид: ADD A,B,C, ind (,cnt) , где ind – индексный регистр, cnt – число операций сложения. При этом происходит следующее: имеется индексный регистр, который определяет смещение текущего элемента относительно базового адреса, передаваемого в команде для каждой локальной памяти и выполняется ПЭ-ом такое число сложений пока не исчерпается счетчик.

e) Загрузка локальной памяти

LOAD A,S,ind,cnt

Где А – адрес в локальной памяти, S – адрес в ОП

По этой команде все ПЭ получают различные данные(каждый ПЭ получает свои), но отстоящие на индекс от базового адреса. Каждый ПЭ имеет свой номер. И поэтому он берет данные с магистрали данных в том случае, если индексный регистр совпал. Аналогичным образом имеется команда сохранения: STORE A,S,ind,cnt

Замечание: в каждом из рассмотренных случаев а)-е) нет взаимодействия между ПЭ.

Пример2: Нахождение скалярного произведения двух векторов

C=A*B

Матрица С формируется по следующему алгоритму: clip_image002, то есть мы эту задачу сводим к задаче умножения поэлементно матриц, рассмотренную ранее. Но нам необходимо еще просуммировать соответствующие ячейки локальной памяти всех ПЭ, чтоб получить скалярное произведение 2-х векторов. Как осуществляются такого рода действия?

a) Элементы ai и bi распределены по устройствам локальной памяти. Вычисление скалярного произведения требует передачу значений ci между ПЭ. Самый простой способ – использовать решение типа команды загрузки или сохранения, когда выдается такая команда и все ПЭ, когда индекс совпадает, выдают соответствующие данные на системную магистраль и один из ПЭ должен получить другую команду и выполнять суммирование всего, что есть на системном интерфейсе. Но здесь возникает проблема, что команды должны быть все одинаковые, так как в матричных системах нет индивидуального интерфейса по обмену командами, т.е. в рамках чтения или загрузки эту задачу решить не сможем, но можем все элементы ci записать в ОП. В этом случае используется коммутационная сеть. Наличие коммутационной среды обеспечивает связь ПЭ по обмену данными. Принцип здесь следующее: передай данные в коммутационную среду и получи данные из коммутационной среды. При этом каждый элемент выставляет эти данные и одновременно получает эти данные от соседнего элемента, выполняет суммирование и выставляет результат на коммутационную среду. Т.е. команда, примерно, такая же, как и в случае индексной команды. Коммутационная среда обеспечивает связь двух конкретных ПЭ, но всем выдает одну команду: ”выполни сложение того, что ты получил и передай на коммутационную среду, но с учетом своего индетификатора индекса”.

Каждый ПЭ, получив свой номер, “знает”, что на его вход поступают данные, что ему надо; он должен их сложить с ячейкой С и передать дальше.

ПЭ получают команду вида ADDK C, ind по которой при равенстве значения индексного регистра номеру ПЭ происходит чтение операнда из коммутационной среды, сложение с ячейкой С и выдача результата в коммутационную среду. Значение индексного регистра изменяется синхронно у всех ПЭ. Это обеспечивает последовательную работу ПЭ по вычислению скалярного произведения с передачей данных через коммутационную среду.

Замечание: коммутационная сеть усложняет матричную систему и снижает быстродействие из-за потерь времени на последовательную пересылку промежуточных результатов.

Загрузка...