УДК 681.3 Ю.Я. ЛЕДЯНКИН*
ОПЕРАЦИЯ ДЕЛЕНИЯ ДЛЯ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ. Ч. 2
*МП «ПАК» Института кибернетики имени В.М. Глушкова АН УССР, Киев, Украина
Анотаця. Пропонуеться цифровий метод виконання арифметичног операцИ дшення (ОД). Алгоритм забезпечуе розпаралелювання обчислювального процесу, прискорення його i тдвищення точност1. Вiн заснований на виконанн етатв операцт в алгебрi матриць i реалiзацiг методiв цифровог арифметики в булевт (можливо, у багатозначтй) алгебрi. Розглянуто варiанти виконання операцИ та приклади рШення. Передбачае розвиток аналогiчних робт у план створення i використання комбтованих алгоритмiв обробки даних шляхом застосування тших алгебр у поеднанн з методами цифровог арифметики.
Ключовi слова: цифровий метод, операщя дшення, паралельн обчислення, обчислювальн системи.
Аннотация. Предлагается цифровой метод выполнения арифметической операции деления (ОД). Алгоритм обеспечивает распараллеливание вычислительного процесса, ускорение его и повышение точности ОД. Он основан на выполнении этапов операций в алгебре матриц и реализации методов цифровой арифметики в булевой (возможно, многозначной) алгебре. Рассмотрены варианты выполнения ОД и примеры решения. Предполагается развитие аналогичных работ в плане создания и использования комбинированных алгоритмов обработки данных путём применения других алгебр в сочетании с методами цифровой арифметики.
Ключевые слова: цифровой метод, операция деления, параллельные вычисления, вычислительные системы.
Abstract. It is proposed the digital method of performing arithmetic division operations (OD). Algorithm provides the parallelizing of computational process, its acceleration and improved accuracy. It is based on carrying out the steps of operations in the matrix algebra and realization of digital arithmetic in Boolean (possibly multi-valued) algebra. The variants of the execution of operation and examples of solutions are regarded. It is suggested the development of similar projects for the creation and using combined data processing algorithms by applying other algebras in combination with the digital arithmetic methods. Keywords: digital method, the division operation, parallel computing, computing systems.
1. Введение
Создание гетерогенных вычислительных систем (ГВС) высокой производительности, параллельных структур (ПС) особенно для обработки информации, представленной в виде сложных структур данных (ССД), требует нового подхода к численным и арифметическим методам, закладываемым в структуры спецпроцессора (СП) и всей вычислительной системы (ВС) [1-3]. Это особенно важно при реализации вычислительных алгоритмов в едином технологическом (вычислительном) потоке (ЕТП) с помощью процессорных элементов (ПЭ) со скалярным умножителем (СУ) в своём составе.
Один из подходов к трансформации численных методов для реализации алгоритмов решения задач математической физики (МФ) с помощью метода конечных элементов (МКЭ) предложен и описан в (Ч.1, [1, 4-7]). Такой подход предполагает обработку ССД и решение систем линейных алгебраических уравнений (СЛАУ) в режиме ЕТП. Он обеспечивает переход к построению высокопроизводительных архитектур гетерогенного типа на базе ПЭ с СУ в своем составе с HOST-процессором в виде центральной интеллектуальной машины (ЦИМ).
Операция деления (ОД), которая часто является неотъемлемой частью алгоритма вычислительного эксперимента (ВЭ), записанного в аналитическом виде, является и ча-
© Ледянкин Ю.Я., 2014
ISSN 1028-9763. Математичш машини i системи, 2014, № 2
стью набора арифметических операций, которые впоследствии необходимо реализовывать с помощью процессора. Но ОД в цифровом виде является менее точной и выполняется за большее (по отношению ко времени выполнения операции умножения) в несколько раз время. Поэтому её реализацию в АУ процессора стараются избегать, а на уровне алгоритма её выполнение часто закладывают при помощи стандартных подпрограмм, основанных на операциях сложения, вычитания и умножения (или на спецпроцессор, который реализует ОД). Для параллельных устройств ограничения связаны и с последовательным выполнением ОД, когда каждая новая цифра частного, как и новый остаток, не могут быть вычислены раньше, чем будет получен и проанализирован предыдущий остаток.
Статья состоит из двух частей.
В первой части статьи излагается цель работы, суть предлагаемого метода выполнения ОД и на конкретных примерах показывается возможность её выполнения, опираясь на математический аппарат матричной алгебры.
Во второй части статьи показана возможность (и целесообразность) перехода от применения на первом этапе аппарата матричной алгебры к использованию математики числовой арифметики на втором этапе формирования обратной величины (ОВ) кода числа. Показаны варианты сочетания методов матричной алгебры и числовой арифметики на разных этапах формирования обратного значения от делимого. Доказывается правомочность использования математического аппарата числовой арифметики в сочетании с методами математического аппарата матричной алгебры. На конкретных примерах предложены и рассмотрены арифметические методы, обеспечивающие на втором этапе выполнения ОВ её реализацию, показываются преимущества, которые даёт предлагаемый метод, и возможность распараллеливания вычислительного процесса по выполнению ОВ.
Цель работы
В части 1 работы предложен и описан метод и алгоритм реализации ОД. Он основан на реализации арифметических операций сложения, вычитания и умножения. Применение метода в СП исключит деление в классическом понимании этой операции, заменив на операцию умножения. Возможность вычисления ОВ в параллельном режиме работы СП с повышенной точностью с помощью СУ, используемых в ПЭ, в режиме ЕТП, особенно важна при решении СЛАУ (и др. задач вычислительной математики). Практически при решении СЛАУ такой подход обеспечит замену решения исходной матрицы с помощью выражения
а.. * а - а.. * а а ---]---]-(1)
а-и-1
на реализацию выражения
а—(а] *а -а] *а]) * аД ]-1. (2)
В выражении (2) коэффициент а-- -_х вычисляется от значения диагонального коэффициента предыдущей а]-1 ]-1, ранее вычисленной строки факторизуемой матрицы (при условии, что а = 1):
1]-1,]-1 = 1/ а]-,]-1 = а--и-1. (3)
Вычислив а-]-11, ]-1 от известной (и не равной нулю) величины на прямом ходе на
структуре, предназначенной для решения СЛАУ в ЕТП, можно полностью "покрыть" решение класса задач в ЕТП на параллельном СП из ПЭ с СУ в своем составе.
Подход, связанный с вычислением а-1 ]-1, не исключает использование НОБТ-
процессора, функции которого выполняет центральная интеллектуальная машина (ЦИМ), работающая в архитектуре ГВС в [3] параллельно с СП.
Постановка задач
Предложить такую (в математическом плане) реализацию метода замены ОД операцией умножения на обратную величину значения кода делителя (предложенного автором и описанного в ч. 1 статьи), которая легко бы реализовывалась структурно с помощью цифровых средств, которые закладываются в ПЭ (с СУ в своем составе), и выполнялась с помощью арифметических операций типа сложения, вычитания и умножения.
2. Решение задачи
Варианты вычисления ОВ. Упрощение вычисления ОВ кода числа
Для числа, записанного с помощью РМП в виде верхней треугольной матрицы, для его хранения можно использовать не ПЭ, а отдельные биты, записанные в запоминающем устройстве (ЗУ) ВС. При такой организации хранения операнда (делителя) требуется всего п2 / 2 бит памяти.
Если использовать отдельное ЗУ (в составе СП), количество битов памяти можно сократить за счет преобразования организации записи и считывания информации из ЗУ. Для этого входные шины записи диагональных (для каждой диагонали отдельно) битов матричного ЗУ следует объединить. Тогда запись кода числа можно выполнить одновременно во всю матрицу. А шины данных (чтения) по каждой строке можно объединить и подключить к регистру формирования обратного кода числа. Это обеспечит одновременное чтение всех коэффициентов (разрядов) при формировании текущего вектора-столбца.
Такая организация хранения операнда позволит варьировать различными способами распараллеливания вычислительного процесса обращения числа.
Но, тем не менее, количество элементов памяти (битов) для хранения операнда (делителя) при записи его с помощью РМП в виде верхней треугольной матрицы избыточно.
Векторный метод вычисления ОВ кода числа
Предложенный ранее вариант вычисления ОВ кода числа, когда используется матрица [С ] с записанным в ней с помощью РМП числом и один вектор-столбец единичной матрицы, также избыточен. Для вычисления ОВ кода числа достаточно взять из матрицы [С] только одну (с1 ]) первую (верхнюю) строку, записанную в обратном порядке (слева -младший спп * 2-п разряд числа С, а справа - старший с1п * 2-1 разряд), например, в регистр сдвига влево (в сторону младшего Ь * * 21, / = 1, п разряда кода числа С ). Таким способом расход оборудования можно сократить, а вычислительный процесс упростить. Рассмотрим алгоритм на примере обращения числа С = {. 1 10100000 0} ^
^ 0 * 2(-п)=10 0 * 2-9 0 * 2-г-1 0 * 2-г=7 0 * 2-г+1 0 * 2 -5 1 * 2 -4 0 * 2 -3 1 * 2-2 1 * 2-1|. Ему для наглядности описания вычислительного процесса поставим в соответствие матрицу [С + ] и вектор-столбец, записанный в виде строки, вида
[С+ ] = [0 0 0 0 0 0 1 0 1 1] г. (4)
В целом работает алгоритм, описанный уравнениями (26а) - (26к) в ч. 1 статьи. В описываемом ниже алгоритме реализуется операция
[С+]г = L * [С + ] г+1 (Ci = L * см * 21), i = 1, п , (4а)
где Ь * - оператор сдвига влево (в сторону младшего разряда в записи (4)) на один разряд (21).
Формально (4) - это один (последний в записи РМП) п -й столбец. Остальные (п — 1) младшие столбцы последовательно формируются п -м столбцом путем сдвига разрядов в сторону младшего п -го разряда числа, формируемого с помощью процедуры типа обратного хода факторизации матрицы. Сдвигая код вектора-столбца, формируем ОВ кода числа делителя С:
Сг ,10 ег,10 сг,10 с г ,10 * (К1 =1)] ег,9
0 0 0 [(0 *1 = 0] 0
0 0 0 [(0 *1 = 0] 0
0 0 0 [(0 *1 = 0] 0
0 0 * 0 [(0 *1 = 0] 0
0 0 1 [(0 *1 = 0] 0
1 0 0 [(1 * =1] —1
0 0 1 [(0 *1 = 0] 0
1 0 1 [(1 * =1] —1
с = 1 = 1,10 е = 1 е1,10 1 (К, =1) 1
с
г, 9 0
0
0
0
1
0
1
1
0 0 0 0 — 1 0 —1 1
ею * 2
е9 * 2 е8 * 2
е7 * 2
—10 9 —8 7
6
е * 2 е * 2—5
е4 * 2 е3 * 2
е2 * 2
е1 * 2
(5)
[с,,9 = Ь * С,
* с 10 * 21], е,
г ,9
(е, ,10 — Сг ,10 (е 1 = (К1 = ^ - = 2Л0, К = = 1
с,-,10 * (К = 1)Х
,7 Ci,8 * (k2 = - l)
О [(О * (-l)) = О]
О [(О * (-l)) = О]
О [(О * (-l)) = О]
l [(О * (-l)) = О]
О [(1 * (—1))=— l]
l [(О * (-l)) = О]
l [(1 * (—1))=— l]
k2 = e2,8 = -l
(e-,g Ci,8) ^ ei,8 (0 — 0) = 0 ^ 0 (0 — 0) = 0 ^ 0 (0 — 0) = 0 ^ 0 (0 — 0) = 0 ^ 0 (0 — (—1)) = 1 ^ (—1) — о = —1 ^ (0 — (—1)) = 1 ^
el0 * 2
eg * 2 e8 * 2 e7 * 2
g
—8 7
б
e * 2
Сб ^ у
e * 2—5
e4 * 2 e3 * 2
e2 * 2
el * 2
[Cl8 = L * Ci g * 21] * (k2 = —1), e,8 = (eiS — c,8(e2 = (k2 = —1)), i = 3,10
k = e
л2 2,8
Чб (Ci,7 * k3 = l)
О [(О *l) = О]
О [(О *l) = О]
0 [(О *l) = О]
1 [(О *l) = О] 0 [(1 *l) = 1] l [(О *l) = О] 1 [(1 *l)=1]
(k3 = e3,7 = l)
1 Cil0 * (kl = 1)X
(ei,8 — Ci,7 ) ^ ei,'
(0 — 0) = 0 ^ |(0 — 0) = 0 ^ ¡(0 — 0) = 0 ^ ¡(0 — 0) = 0 ^ 1(0 — 1) = —1 ^ 1(1 — 0) = 1 ^ |(—1 — 1) = —2 ^
О О О
0 -l
1
-2
l -l
l
el0 * 2 eg * 2
es * 2 e7 * 2
—10 9 —8 —7 -б
eб * 2
e5 * 2—5 *
e4 * 2
e3 * 2 e2 * 2
el * 2
—4 —3 -2
[Cl,7 = L * Ci,8 * 21] * (k3 = i), ei,7 = (ei,8 — Ci,7 (e 3 = (k3 =1)), i = 4,í0, k, = e3,7 = 1,
C-,5 C-,6 * (k = —2)
0 [(0 * (—2) = 0]
0 [(О* (-2) = О]
1 [(0 * (—2) = 0]
0 [l * (-2) = -2]
1 [(О* (-2) = О] l [l * (-2) = -2]
k = e^ =—2)
(ei,7 — CiJ ^ ei,
(0 — 0) = 0 ^ (0 — 0) = 0 ^ (0 — 0) = 0 ^ 1(0 — (—2)) = 2 ^ |(—1 — 0) = —1 ^ 1(1 — (—2)) ^
О О
0 2
-l 3 -2
1 -l
l
e * 2 e9 * 2
—10 —g
8
es * 2
e7 * 2 -7
e6 * 2 e5 * 2 e4 * 2
e3 * 2
e2 * 2
el * 2 —1
C
[C1,6 = L * C,7 * 21] * (k4 = 1), el,6 = (el,7 - Cl,6(e 4 = (k4 = -2)^ l = 5,10, k4 = e4,6 = -2,
,4 (Cl,5 * k5 = 3) 1 (el,6 - Cl,5) ^ el,5
0 [0*3 = 0] 1 (0 - 0 = 0) ^ 0
1 [0*3 = 0] (0 - 0 = 0) ^ 0
0 [1 * 3 = 3] (0 - 3) = -3 ^ -3
1 [0*3 = 0] (2 - 0) = 2 ^ 2
1 [1 * 3 = 3] K- 1 - 3) = -4 ^ -4
(k5 = e5,5 = 3) 3
-2 1 -1 1
e10 * 2
e9 * 2 es * 2 e7 * 2
-10
e * 2-
e5 * 2-5 e4 * 2 e3 * 2 e2 * 2
e * 2 -1
[C1,5 = L * C,6 * 21] * (k5 = e5,5 = 3^ el,5 = (el,6 - Cl,5 (e 5 = (k5 = 3)X l
6,10,
k5 = e5,5 = 3,
,3 (Cl,4 * (k6 =-4)) 1 (el,5 - Cl, 4) ^ el,4
1 [0 * (-4) = 0 (0 - 0) = 0 ^ 0
0 [1 * (-4) = -4 1(0- - (-4)) = 4 ^ 4
1 [0 * (-4) = 0 |(- 3 - 0) = - -3 ^ -3
1 [1 * (-4) = -4 1(2 - (-4)) = 6 ^ 6
(k 6 = e6,4 =-4) -4
3 -2 1 -1 1
-10 -9 -8 7 6 -5 4 -3 2 -1
e * 2
10
e9 * 2 es * 2
e7 * 2e * 2-
e5 * 2 e4 * 2 e3 * 2
e2 * 2
e1 * 2
[C1,6 = L * C,7 * 21] * (k6 = e6,3 = -4), el,4 = (el,5 - Cl,4 (e 6,4 = (k6 = -4)), l = 7,10,
(k6 = e6,4 =-4),
c
c
,2 (cl,3 * k7 = б)
Q [l * б = б]
l [Q * б = Q]
l [l * б = б]
(k7 = e7,3 = б)
l,3
|(el,4 - cl,3) ^
|(Q - б) = -б ^ - б |(4 - Q) = 4 ^ 4 |(-3 - б = -9 - 9 б -4 3 -2 l -l l
e * 2
1Q ^
e9 * 2
e8 * 2
e7 * 2
eб * 2
e5 * 2 e4 * 2 e3 * 2
e2 * 2
el * 2
-1Q -9 8 7 -б -5 4 ■3 2 -l
[c,7 = L * c,б * 21] * (k7 = e73 = б) , el,3 = (el,4 - cl,3 (e 7,3 = (k7 = б)), l = 8,1Q
(k7 = e7 3 = б),
Cl (Cl,2 * (ks =-9))
Q [Q * (-9) = Q l [l * (-9) = -9] (k8 = e8,2 = -9)
|(el,3 - Cl,2) ^
|- б - Q = -б |4 - (-9) = 13 ^
l,2
-б 13 -9 б -4 3 -2 l -l l
e * 2 e9 * 2
e8 * 2
-1Q
-9 -8 -7
e7 * 2
e6 * 2-б *
e5 * 2 e4 * 2 e3 * 2
e2 * 2
el * 2-l
[Cl,8 = L * Cl,7 * 21] * (k8 = e^ = -9^ el,2 = (ei? -c.2(e 8,2 = (k8 = -9)), l = 9,1Q,
(k8 = e8,2 =-9),
cl cl * 13
1 [1 * (13) = 13] (k9 = el,9 = 13)
|(e2 - C2)
el
- б -13 = -19 -19 l3 -9 б -4 3 -2 l -l l
e * 2
lQ
e9 * 2
e8 * 2
e7 * 2
eб *2 ^
e5 * 2-
e4 * 2 e3 * 2
e2 * 2
lQ -9 8 -7 -б ■5 -4 3 -2
e * 2-l
c
[с.9 = Ь * с. 8 * 21] * (к, = е^ = 13), *[С+]-1 *[С ]-1 = {С-1} *
{1 * 2-1 -1 * 2-2 1 * 2-3 - 2 * 2-4 3 * 2-5 - 4 * 2-6 6 * 2-7 - 9 *2-8 13 * 2-9 -19 * 2-10}.
В результате получаем число, которое записано в позиционной системе счисления. Вес каждого 1 -го разряда равен с1 * 2-г. Причем некоторые разряды записаны в виде
с1 = ±1, а частично в виде многозначных чисел. Если в процессе дальнейших вычислений
ОВ не использовать многозначные числа непосредственно, то можно выполнить процедуру преобразования многозначных чисел в двухпозиционные числа с помощью алгоритма, предложенного и описанного ниже.
Для числа разрядностью п предложенный выше алгоритм определения ОВ кода числа можно записать:
1. (С1,п = 1) = Кп = еп = {0 * 2-п ..0 * 2-2 1 * 2-1}.
2. с.,п * (еп = 1).
3. е. - с ,, 1 = 2,п.
г,п г,п-1' '
4. Ь * с , * 21 = с ,.
5. с , = е ,.
п-1 п-1
6. с , * (к = е , = с ,).
г,п-1 V п-1 п-1 /
7...................
8. [с.,п-2 = Ь * с.,п-3 * 21] * (кп-2 = еп-2,2) , е.,2 = (е1,3 - с1,2(е п-2,2 = (кп-2Х
I = п -1 п, (кп-2 = еп-2,2).
9. [с. , = Ь * с. 2 * 21] * (к , = е, ,).
.,п-1 .,п-2 п-1 1,п-1
10. [С ]-1 ={С-1}.
Анализ реализации примера по приведенному выше алгоритму ОВ кода числа делителя показывает, что поразрядную операцию умножения . -го вектора-столбца на соответствующий коэффициент с. * Е1 с помощью дополнительного устройства можно считать излишней.
Коррекция алгоритма
Умножение кода числа Е. * 2 1 на "1" или "0" дает тот же результат. Поэтому достаточно
на входе (или на выходе) каждого разряда регистра сумматоров (СУ) устанавливать по шинному формирователю (ШФ), информационные входы каждого из них подключены к выходам результата соответствующего разряда сумматора, а управляющими входами ШФ является выход соответствующего разряда регистра сдвига, в котором формируется обратный код соответствующего числа (делителя). Такая коррекция дает экономию в п устройств (сумматоров НТ) и операций умножения, оставляя алгоритму выполнение операции сдвига вектора-столбца и (п - .) операций сложения (вычитания) в п -разрядном ре-
N
гистре сумматора (^ НТ 1), что необходимо делать всегда.
I=1
Вычисление {В} / {С} = [В] * [С]-1 = [А].
Первый вариант - выполнение операции умножения "в лоб" по правилам алгебры матриц, когда каждый разряд формируемого числа С 1 в матричной записи [С] 1 рассматривается как многозначное число (взятое со своим знаком и весом), на которое умножается множимое В, записанное как п -разрядное число в позиционной записи, двоичном представлении ("0","1")) с помощью РМП.
Следует заметить, что предлагаемый подход замены ОД (в классическом понимании операции) умножением делимого на ОВ от делителя превращает некоммутативную операцию деления в коммутативную операцию умножения. Переход к операции умножения и возможность использования правила коммутативности обеспечивает замену операндов местами, что дает дополнительные преимущества предлагаемого метода, то есть умножать ОВ кода числа на код числа делимого.
Рассмотрим реализацию предлагаемого метода выполнения ОВ на примере умножения {С 2} на его обратное значение классическим методом.
Перемножим два числа {С2} и {С2}-1 удвоенной (до 10) значности путем добавления пяти младших нулевых разрядов (из табл. в ч. 1 статьи):
{С2} ={1 1 0 1 0 0 0 0 0
0},
(6)
{С2}-1 ={1 -1 1 -2 3 -4 6 -9 13 -19}.
В рассматриваемом примере умножение младших пяти нулевых разрядов множи-
мого на {С2} 1 не имеет смысла, поэтому будем перемножать старшие пять разрядов чис-
ла
{С2} = [11010]
на
младшие
{С2}-1 = {-4 6 -9 13 -19}:
пять
110 1 6 - 9 13
разрядов
множителя
(7а)
19
-19 -19 0
13 13 0 13
-9 -9 0 -9 0
6 6 0 6 0
- 4 -4 0 -4 0
Ъ = - 4 2 -3 0 0 - 28 13
и на старшие пять разрядов {1 -1 1- ■2 3} множителя:
1 10 10
* 1 -1 1 - 2 3
-19 0
19 0
(7б)
Ъ = 1 0 0 0 0 4
■2 3 0
В результате имеем
0
4
0
{С2} * {С2}-1 =- 4 2 - 3 0 0 - 28 13 -19 0 (7в)
+ 1 00004 - 2 30
1000000000 (-28 13 -19 0).
Поскольку правило коммутативности умножения в арифметике (в отличие от правил матричной алгебры) допускает перестановку сомножителей, поменяем их местами и
умножим {С2}-1 =[1 -1 1 - 2 3 - 4 6 - 9 13 -19] на
{С2} = [1 1 0 1 0]:{С2}-1 * {С2} = 1 -1 1 -2 3 -4 6 -9 13 -19. (7г)
* [1 1 0 1 0]
0000000000 1 -1 1 - 2 3 - 4 6 - 9 13 -19 0000000000 1 -1 1 - 2 3 - 4 6 - 9 13 -19 1 -1 1 - 2 3 - 4 6 - 9 13 -19
^ = 1 0 0 0 0 0 0 0 0 0 (-28 13 -19 0).
Из примеров (7) следует, что операцию умножения можно выполнять заменой местами сомножителей, то есть умножением полученного кода {С2}-1 (делитель) на двоичное представление кода числа множимого [5].
Вычисления в (7а), (7б), (7в) и (7г) равны. Процедура умножения упрощается, потому что в СП в каждом из ПЭ 1-п поразрядно от 1 до п уже хранятся все п значений разрядов числа, полученных при факторизации матрицы. Но реализация умножения будет отличаться от правил умножения в алгебре матриц. Если в СП для обоих сомножителей применить дополнительный код, то вариант замены сомножителей местами можно отнести к недостаткам. Применение оптимального метода умножения чисел означает, что код множимого всегда должен быть положительным. Иначе его следует вновь преобразовать в дополнительный код. Но в данном случае умножение кода отрицательного числа (множимого) сводится к одноразовому умноженню на "1". Для процедуры накопления (суммирования частичных призведений) это равносильно операции вычитания многозначного кода числа. Алгоритм будет приведен в статье ниже.
Одновременно заметим, что реализация умножения, описанная выше выражениями (7а), (7 б), (7в) и (7г), позволяет распараллелить в целом весь вычислительный процесс.
Формирование ОВ кода числа по правилам цифровой арифметики
Для этого в процессе формирования j -го вектора-столбца матрицы [С]-1 по правилам алгебры матриц при вычислении соответствующего (1 -го) разряда, представляемого многозначным числом, предлагается использовать алгоритм преобразования его в двухпозици-онный код ("0" и "1") по правилам цифровой арифметики. Переносы, возникающие в текущем разряде (отличающемся от "0" и " ± 1"), следует передать на третий вход сумматора старшего разряда. При суммировании текущих значений каждого из разрядов формируемого числа переносы (поступающие в старшие разряды) будут просуммированы с учетом их веса (позиции в пределах разрядной сетки). Тогда многозначный код 1 -го разряда 1 -го
вектора-столбца матрицы [С *] 1 будет преобразован (распределен и учтен в старших (/ +1) -х разрядах) с учетом веса.
Замечание
Из примера (5) формирования ОВ кода числа следует, что умножение всех ] -х компонент текущего I -го вектора-столбца (с ^ ) производится на один коэффициент с его знаком
("+к" или "-к"). Это определяет, что знаки переносов из младшего разряда в старший совпадают и операция суммирования кодов чисел выполняется в соответствии с правилами числовой арифметики. Для кода числа
[С*]г =[11010]=(26/32=0,8125) (8)
(для которого обратная величина [С]-1 равна [С]-1 = [1-11-23]=(11/32=0,34375)) в алгебре матриц пример преобразования ОВ кода числа в код цифровой арифметики [С *]-1 = [1 -1 0 1 1] может быть описан с помощью алгоритма:
[С *]-1 = [1 -10 1 1] (11/32 = 286/512) (9)
* * * 11 3-05 = (1 * 2-4 1 * 2 -5)2
* * * -1 * - 2-04 = (-1 * 2 -3)2 * * * * 1 1-03 =1-3 * * * * -1 -1-02 = -1-2 * * * * 1 1-1 = 1-1
[С ]-1= [1 -1 1 - 2 3] (11/32 = 286/512),
где
- запись в таблице вида 3-05 означает, что цифра 3 в данном разряде записана в десятичном коде двухпозиционной системы и равна коду (1 * 2-4 1 * 2-5)2 , записанному в двоичном коде той же двухпозиционной системы;
- снизу таблицы записан код числа [1 -1 1 - 2 3] = 11/32 = 286/512 в двухпо-зиционной системе счисления, полученного в алгебре матриц в процессе факторизации числа (в записи РМП);
- сверху таблицы записан код числа [1 -1 0 1 1] = 11/32 = 286/512 в двухпози-ционной системе счисления, полученного после преобразования его по правилам цифровой арифметики. Их значения равны. Умножение на любое из них в цифровой арифметике даст равнозначный результат. Но по правилам алгебры матриц умножение вектора (каким будет число в виде РМП записи) на них даст разные значения, за которыми проследим ниже.
Пример. Как векторы они не равны, поэтому и произведение их в алгебре матриц даст разный результат. Это существенное различие получаемого результата формирования [С *]-1.
В первом варианте вычисления, выполняя операции в алгебре матриц, мы получаем (вектор-столбец [С*]-1), умножение матрицы [С] на который в результате даёт единичную матрицу ([Е ]). Во втором варианте вычисления получаем число, умножение матрицы [С ] на которое в результате НЕ даёт единичную матрицу ([Е ]).
При умножении двух чисел [С ] * [С *] 1 = [1 1 0 1 0] * [1 -1 0 1 1]
= 26/32* 11/32 = 286/512(пример (7а)) по правилам цифровой арифметики необходимо для положительных разрядов множителя складывать ЧП { (в виде кода множимого, взятого с учетом веса текущего разряда множителя), а для отрицательных разрядов кода множителя - вычитать код множимого.
Пример. Получим сумму 2 ЧП 1 от умножения на положительные (и "0") разряды мно-
1,3-5
жителя:
[1 1 0 1 0]
(10)
* 1
10 11
110 10 110 10 0 0 0 0 0 1 1 0 1 0
2 ЧП 1 = 1 1110 1110.
1,3-5
ЧП 5 = 1* 2-ЧП 4=1 * 2
-4
ЧП 3 = 0 * 2 -3 ЧП =1 * 2-1
Для получения кода результата необходимо умножить на (-1 * 2 2) - отрицательный разряд множителя. Для этого из частичного произведения 2 ЧП 1 по алгоритму [3]
1,3-5
следует вычесть код множимого. С этой целью следует преобразовать в обратный код 2 ЧП 1 , сложить его с кодом множимого, а полученный псевдорезультат вновь обратить:
1,3-5
2ЧП 1 * 2ЧП1=0 0 0 0 1 0 0 0 1
(10а)
1,3-5 1,3-5
+110 10
ЧП, = 1 * 2-
011100001 результат в инверсном коде
1 0 0 0 1 1 1 1 0 ЧП 2 (результат умножения)=
=[С ]т * [С*]-1 = [Ст = 286/512.
Выполним формально преобразование ОВ кода: [С+ ]-1 = {1 -10 0 111 -
10
-1}=307/1024
(11)
1
0 -1
0 0
1
0 0 -1 *
0 0 0 1 1
0 0 -1 0
0 0 1
0 -1 0 0 -1
= 1 * 2-1 = (-1) * 2-2 = 1 * 2 -3 = -2 * 2 -4 = 3 * 2-5 = (-4) * 2-= 6 * 2-7 = (-9)* 2
-8
2
6
*
1
0 1 1 0 1 = 13 * 2-9
-1 0 0 -1 -1 = (-19) * 2-10
[С]-1 = [1 -1 1 - 2 3 - 4 6 - 9 13 -19] =307/1024
{1 -1 1 -2 3 -4 6 -9 13-19}*{1 -1 0 0 1 1 1 -1 0 -1}=307/1024. (12)
Из рассмотрения примера (11) видно совпадение знаков во всех разрядах в пределах одной строки. В практике выполнения операции умножения это имеет принципиально важное значение. Кроме этого, из матрицы (11) видна возможность распараллеливания вычислительного процесса.
3. Накопление знакопеременных ЧП
В процессе формирования ОВ кода вектора-столбца (по правилам алгебры матриц) и преобразования (10-10а) вектора в число (по правилам цифровой арифметики) при накоплении знакопеременных ЧП, представленных в дополнительном коде (ДК) в аппаратной реализации стандартных (известных) методов могут возникнуть трудности. Это связано с вы-
ходном коде с вычитаемым ЧП г+1 в обратном коде с прибавлением "1" в младшем разряде
суммируемого числа. Это суммирование вносит неоднозначность выполняемых операций сложение/вычитание. Предложенный выше алгоритм (10) для одноразового вычитания исключает такую неоднозначность операции, делая её, по существу, однотипной с выполнением операции сложения.
Фактически знак "+" или знак "-" определяет в сумматоре СУ, по каким шинам (прямым или инверсным) поступает код уменьшаемого, а после выполнения операции суммирования код результата будет записан в регистр сумматора (как результат выполнения операции вычитания).
В устройстве с запоминанием полученных на очередном такте значений результата (В) и переноса (Е) в каждом разряде сумматора предлагается использовать следующий алгоритм выполнения операций сложение/вычитание.
Операцию сложения следует выполнять по известным правилам, запоминая значения результата (В) и переноса (Е) в каждом разряде сумматора в коде представления -исходном ДК (без преобразования его в обратный). На выходе сумматора СУ на двух регистрах (результата RgB и переноса RgE) запоминают два слагаемых от текущей суммы.
Полученные ранее коды суммируем с третьим числом на RgC, получая вновь В и Е на RgB и RgE. Если при умножении за операцией сложения следует выполнение операции вычитания кода множителя (умножение на отрицательное число) из двух слагаемых результата (В) и переноса Е (запомненных в каждом разряде сумматора на RgB и RgE и представляющих собой сумму (или разность от предыдущей операции), третьего числа С с RgC ), то нельзя формально использовать алгоритм вычитания:
читанием кода множимого, когда по алгоритму складывают уменьшаемое
А - С = А + С,
(13)
поскольку А = В + Е имеем
(В + Е) - С = (В + Е) + С Ф В + Е',
(14)
так как из обоих чисел (В) и (Е) вычитаем С . Необходимо выполнять
В + С + Е = В + Е .
(15)
Это означает, что при накоплении знакопеременных чисел полученные в сумматоре значения результата В необходимо передавать на регистр хранения значений кода результата в обратном (при суммировании - в прямом коде), а значения переносов - всегда в прямом коде. И каждую операцию вычитания (первичную или после операции суммирования) выполнять путем сложения значений кода результата в обратном коде с новым значением кода ЧП.
Пример. 7 -7 +5 = 5*0.0111=А =7 + 1.1001=В =-7 + 0.0101=С =5.
0.0111 = А
- 0.0111 =+7
1.1000 =А
+ 0.0111 = В
1.1111 = В' 1.1111 = В' 0.0101 = Д = 5
0.0000 = В' 0.0000 = В' 1.1010 =Я
+ 0.000 — = Е" + 0.000 — = Е" + 0.0111 = А = 7
+ 0.0101 = С + 0.0101 =С 1.1101 = В'
0.0101 = Я = 5 + 0.000 — =Е
0.0001 1.1110
= Я
= Я = —2.
4. Параллельное вычисление ОВ
Вычислительный процесс по реализации ОВ может быть распараллелен.
Он может быть заложен в пределах одного j -го, ] = п,1 столбца, когда вычисления выполняются одновременно во всех / -х, I = п,1 разрядах (битах числа).
Возможны другие пути распараллеливания вычислительного процесса. Например. "Разбить" п -мерный (п » к) вектор-столбец на к блоков (в пределе
к = п) и вычислять коэффициенты в каждом из блоков одновременно.
Закладывать параллелизм можно и на одновременное вычисление т, т = 1, п вектор-столбцов. В этом варианте метода начало вычислений в каждом т -ом столбце можно начинать только со сдвигом на один вычислительный такт (не менее), на котором будет вычислен коэффициент (разряд) определяемого числа. Окончание вычислений будет (практически) одновременно, поскольку длина каждого следующего (j — 1) -й столбца
(j = п, 1) на единицу меньше длины предыдущего j -го, а заканчивается на первой строке (/ = 1). Однако загрузка устройств в таком варианте распараллеливания будет неравномерной, поскольку в первом вычисляемом (п — м) столбце следует вычислить все I -е, I = п,1 коэффициенты, в то время как в последнем (j = 1) вычисляемом столбце следует выполнить вычисления только один раз. Разбивка вычислений на к блоков в пределах каждого j -го столбца может усреднить загрузку вычислительного устройства.
Вариант вычисления обратной величины [С + ]-1 методом вычисления вектора-столбца (5) может быть также распараллелен. Для этого следует разбить вектор-столбец длиной I = п,1 на к блоков (в пределе к = п). После вычисления ОВ очередного (г-го)
значения разряда вектора-столбца вычисления [С + ]-1 можно производить во всех блоках формируемого вектора-столбца на разных блоках ПЭ к одновременно.
Возможны сочетания процессов распараллеливания вычислений на блоки с параллельным вычислением в каждом столбце в пределах одного блока. Количество строк в матрице, записанной с помощью РМП, для одинаковой загрузки блоков можно рассчитать, исходя из того, что "площадь" начального треугольника к г = п, г факторизуемой матрицы
равна "площади" трапеций из строк к2 = г + т,...,1 ..., "следующих" за ним. 5. Выводы
1. Предлагаемый метод выполнения ОВ позволяет:
- исключить ОД в классическом понимании операции деления, сводя её к выполнению операций сложения, вычитания и умножения;
- за счет приведения операции к умножению сделать её коммутативной;
- распараллелить вычислительный процесс как всего алгоритма, так и на уровне
ОВ;
- ускорить выполнение ОД;
- повысить точность ОД.
2. Выполнение метода основано на использовании методов алгебры матриц и цифровой арифметики булевой (возможно, многозначной) алгебры.
3. Применение метода:
- замыкает (в плане создания ЕТП) вычислительный процесс с обработкой ССД на параллельных структурах из ПЭ на базе СУ;
- позволит решать СЛАУ методом факторизации без выполнения ОД, которая имеет низкую точность выполнения, не подлежит распараллеливанию на уровне выполнения операции и из всех арифметических операций является наиболее длительлной по времени выполнения;
- позволит повысить точность выполнения предполагаемой ОД и распараллелить её выполнение не только в СП, но и с помощью универсальных ЭВМ;
- позволит использовать методы решения СЛАУ, предложенные в 2, организовывая ЕТП в универсальных ЭВМ ещё до создания СП для задач МФ;
- кроме решения задач МФ, метод ОВ может успешно применяться в задачах поиска последовательных приближений, обращения матриц, вычисления невязок, при исправлении элементов приближенной матрицы и др. случаях решения СЛАУ, задач МФ и др.
4. Следует провести дополнительный анализ предложенных решений выполнения ОВ (и отдельных этапов её), провести исследования в плане комбинирования методов алгебр матриц и цифровой арифметики для других целей.
5. Можно предположить, что изложенные выше алгоритмы, сочетающие (на разных этапах выполнения операции деления) обработку цифровых данных по правилам алгебры матриц и методам цифровой арифметики, могут положить начало новому направлению в создании цифровых устройств параллельного типа с использованием СУ; при обработке сложных структур данных (ССД); в едином технологическом (вычислительном) потоке (ЕТП). Особенно при создании архитектур гетерогенного типа для моделирования вычислительных экспериментов (ВЭ) с включением в свой состав центральной интеллектуальной машины
(ЦИМ), при решении задач не только МФ, но и других научно-технических и экономических (общих) задач.
Заключение
В рамках выделяемого для статьи объёма трудно предложить новый метод и изложить решения (и все нюансы) отдельных этапов метода, который в данном случае можно считать постановочным в плане нового подхода к выполнению цифровой арифметической операции деления. Предполагается, что метод не является панацеей. Но он даст толчок для дальнейшего его продвижения специалистами, работающими в области разработки, адаптации вычислительных методов и создания численных высокопроизводительных параллельных структур. Особенно параллельных архитектур гетерогенного типа, обеспечивающих сверхвысокую производительность при снижении затрат на обработку единицы информации.
Идея выполнения операции деления (как и метода факторизации матрицы [2]) была предложена автором во время работы в МП ПАК «Вычислительные средства, программирование и технология" Института кибернетики им. В.М. Глушкова АН УССР, организованном в конце 80-х годов прошлого столетия для создания спецпроцессора новой архитектуры и проработана в ТОО «ФИРМА «ПАК»». В силу форс мажорных обстоятельств работы по спецпроцессору были остановлены. По этой причине была задержана и публикация. Настоящая статья подготовлена к передаче в печать в год 90-летия светлой памяти академика В.М. Глушкова - талантливого ученого-кибернетика и алгебраиста, менеджера и человека, которому наука и мы во многом обязаны.
Считаю приятным долгом выразить свою признательность В.П. Клименко, который стимулировал написание и оказал содействие в издании цикла статей (Ч. 1, [2-8]) в направлении работ, поддержанном в своё время В.М. Глушковым.
СПИСОК ЛИТЕРАТУРЫ
1. Ледянкин Ю.Я.Методы получения суммы парных произведений для решения уравнений математической физики / Ю.Я. Ледянкин // Автоматика. - 1979. - № 5. - С. 78 - 82.
2. Ледянкин Ю.Я. Ускоренный метод умножения чисел, представленных в последовательном дополнительном коде / Ю.Я. Ледянкин // Автоматика. - 1989. - № 3. - С. 76 - 82.
3. Боюн В.П. Об одном способе повышения эффективности процессора / В.П. Боюн, Ю.Я. Ледянкин // Технические средства управляющих машин и систем. - Киев: РИО ИК, АН УССР, 1976. -С.42 - 54.
4. Ledyankin Yu.Ya. Accelerated Method of Multipying Numbers Represented in Sequential Code / Yu.Ya. Ledyankin // Soviet Journal of Automation and Information Sciens. - 1989. - N 3. - P. 88 - 94.
5. Ledyankin Yu.Ya. Methods of Obtaining the Sum of Pairs of Products in Solving the Equations of Mathematical Phisics / Yu.Ya. Ledyankin // Soviet Automatic Control. - 1979. - N 12. - P. 61 - 64.
6. А.с. № 822181 (СССР). Устройство для умножения чисел в дополнительных кодах / Ю.Я. Ледянкин, Б.Н. Малиновский.
Стаття над1йшла до редакцп 12.12.2013