Способ организации выполнения операции умножения двух чисел в модулярно-логарифмическом формате представления с плавающей точкой на гибридных многоядерных процессорах
Иллюстрации
Показать всеИзобретение относится к вычислительной технике и предназначено для выполнения операции умножения двух чисел в модулярно-логарифмическом формате с плавающей точкой. Техническим результатом является упрощение выполнения операции умножения. Способ осуществляется на гибридных многоядерных процессорах и содержит процедуру умножения двух чисел в модулярном формате с плавающей точкой, включая контроль переполнения, потери порядка, масштабирования.
Реферат
Изобретение относится к вычислительной технике и предназначено для выполнения операции умножения чисел, представленных в модулярно-логарифмическом формате с плавающей точкой на гибридных многоядерных процессорах.
Известен способ организации выполнения операции умножения двух чисел в модулярно-позиционном формате представления с плавающей точкой на универсальных многоядерных процессорах (A.C. RU №2509345, БИ №7, 10.03.2014), в котором операция умножения t-разрядных позиционных мантисс сомножителей заменяется n параллельно выполняемыми операциями умножения q-разрядных знакопозиций чисел в системе счисления в остаточных классах. Недостаток данного способа состоит в том, что не определено, каким образом выявляются ситуации переполнения диапазона представления модулярных мантисс при выполнении операции умножения и выполняется процедура масштабирования мантисс, таким образом, способ (A.C. RU №2509345, БИ №7, 10.03.2014) может быть использован для выполнения операции умножения не для всех операндов из заявленного диапазона представления.
Наиболее близким к заявленному способу является способ организации выполнения операции умножения двух чисел в модулярно-позиционном формате (Исупов К.С., Мальцев А.Н. Способ представления чисел с плавающей точкой большой разрядности, ориентированный на параллельную обработку //Вычислительные методы и программирование: новые вычислительные технологии. 2014. Т. 15, №4. С. 631-643), в котором масштабирование мантиссы осуществляется методом, использующим таблицы поправочных коэффициентов с применением интервально-позиционных характеристик. Недостаток данного способа состоит в том, что необходимо хранить таблицы поправочных коэффициентов большого размера, а также использовать вычислительные устройства с плавающей точкой для вычисления интервальной позиционной характеристики.
Техническим результатом применения способа организации выполнения операции умножения двух чисел в модулярно-логарифмическом формате представления с плавающей точкой на гибридных многоядерных процессорах является оптимизация выполнения операции умножения в раз, где q - разрядность знакопозиций чисел в системе счисления в остаточных классах, за счет использования только целочисленных операций при умножении, проверке выхода за границы диапазона, масштабировании модулярных мантисс степенью двойки, при этом не требуется использования операций с плавающей точкой и подстановочных таблиц. Минимальное время выполнения операции умножения предложенным способом равно минимальному времени выполнения операции умножения способом (A.C. RU №2509345, БИ №7, 10.03.2014), при этом способ может быть применен для умножения любых операндов из заявленного диапазона представления, в чем заключается универсальность предлагаемого способа.
Описание способа организации выполнения операции умножения двух чисел в модулярно-логарифмическом формате представления с плавающей точкой на гибридных многоядерных процессорах: реализация способа осуществляется посредством подачи набора электрических, нейронных либо других сигналов на устройства управления каждого вычислительного ядра многоядерного гибридного процессора, которые, в соответствии с данными сигналами, формируют управляющие команды для операционных устройств соответствующих вычислительных ядер.
В позиционных двоичных форматах с плавающей точкой стандарта IEEE-754 любое вещественное число представляется трехэлементным набором:
где М - рациональная мантисса, е - порядок числа, emin=2-2ν-1 и emax=2ν-1-1, S-знак числа.
Величина чисел, записанных в таком формате, выражается формулой -1S⋅М⋅2е. Машинными представлениями чисел вида (1) являются (ν+t+1)-разрядные двоичные векторы (Srν-1…r2r1dt…d2d1), где разряды с d1 по dt отводятся под представление рациональных двоичных мантисс М=dtdt-1…d2d1, разряды с r1 по rν отводятся под представление целочисленных двоичных порядков е, записанных в форме с избытком Е=rνrν-1…r2r1=е+emax, разряд S выражает знак числа.
Определим целочисленную мантиссу М'=dtdt-1…d2d1 как t-разрядное неотрицательное целое двоичное число, такое, что М=М'⋅21-t. Определим перемещенный порядок λ как целое двоичное число со знаком, такое, что λ=е-t+1, где е - ν-разрядный порядок числа, представленного в двоичном формате (1).
Зададим n целочисленных положительных q-разрядных оснований системы остаточных классов p1,р2, …, pn, таких, что ∀i1, i2∈{1, 2, …, n), i1≠i2: , q≤k, где - наибольший общий делитель для и , k - размер разрядной сетки процессора.
Целочисленную мантиссу М'=dtdt-1…d2d1 преобразуем в систему остаточных классов с заданными основаниями р1, p2, …, pn, получая тем самым модулярную мантиссу :
,
где mi∈[0, рi-1], i=1, 2, …, n - q-разрядные цифры (модулярные разряды) модулярной мантиссы , q - разрядность оснований p1, p2, …, pn, - операция получения остатка от деления М' на i-ое основание pi.
Определим ранг модулярной мантиссы как значение R, такое, что выполняется условие:
,
где - мультипликативная инверсия Рi по модулю рi∈[1, n], n - количество модулей.
R∈[0,n-1] и вычисляется по формуле:
,
где - наибольшее целое, не превышающее
При условии, что 2q-1<pi<2q, где q - разрядность оснований р1, р2, …, рn, величина может быть вычислена по формуле , где wi - s-разрядные весовые коэффициенты. Тогда величина ранга может быть вычислена по формуле:
.
Определим верхнюю и нижнюю границы величины ранга модулярного числа как
, ,
где , , при условии, что 2q-1<рi<2q, - наибольшее целое, не превышающее , s - разрядность коэффициентов wi.
Согласно теоретико-числовой теореме Эйлера мультипликативную инверсию , соответствующую сравнению , можно вычислить следующим образом
,
где ϕ(pi) - функция Эйлера, равная количеству целых чисел в диапазоне [1, рi], взаимно простых с рi.
Пример. Вычислим значения мультипликативных инверсий Pi по модулям рi для системы с основаниями: р1=11, р2=13, р3=15:
; ϕ(11)=10; ;
; ϕ(13)=12; ;
; ϕ(15)=12;
Определим логарифмическую характеристику числа как значение двоичного логарифма от этого числа. Тогда логарифмическая характеристика модуля числа, представленного в формате [М, е, S], вычисляется следующим образом:
log2(М'⋅21-t⋅2е)=log2(М')+е-t+1=log2(М')+λ.
Определим интервальную логарифмическую характеристику мантиссы числа как целочисленный интервал [Lmin, Lmах], нижняя и верхняя границы Lmin, Lmах которого представлены r-разрядными двоичными числами без знака и вычисляются следующим образом:
Lmin=[log2(М')⋅2r-h-1],
Lmах=Lmin+1
где , - наибольшее целое, не превышающее , [log2(М')⋅2r-h-1] - наибольшее целое, не превышающее log2(М')⋅2r-h-1.
Диапазон представления нижней и верхней границ Lmin, Lmах интервальной логарифмической характеристики:
; ,
где - значение нижней границы интервальной логарифмической характеристики диапазона представления модулярных мантисс , - наибольшее целое, не превышающее .
Таким образом, число с плавающей точкой вида (1) можно преобразовать к следующему модулярно-логарифмическому формату:
где 〈m1, m2, …, mn〉 - набор знакопозиций (модулярных разрядов) модулярной мантиссы , λ- позиционный перемещенный порядок, представляющий собой целое двоичное число со знаком, Lmin, Lmax - границы интервальной логарифмической характеристики мантиссы числа, представляющие собой целые двоичные числа без знака, σ - знак числа, причем если σ=-1, то число отрицательное, σ=1 - положительное, σ=0 - машинный ноль.
Диапазон допустимых значений модулярных мантисс в системе остаточных классов с основаниями p1, p2, … , рn определяется интервалом ; таким образом, t-разрядная позиционная мантисса М=dtdt-1…d2d1 может быть представлена в системе остаточных классов набором из n взаимно независимых q-разрядных знакопозиций 〈m1, m2, …, mn〉, причем q≈t/n (при условии, что все основания р1, p2, …, pn q-разрядные).
Примеры преобразования позиционных чисел с плавающей точкой в модулярно-логарифмический формат: пусть числа представлены в 10-разрядном двоичном формате вида (1), в котором под смещенный порядок Е, отводится четыре бита (максимальный порядок еmax=24-1-1=7, соответственно е=Е-7), под дробную часть мантиссы - пять бит (т.е. t=6, причем целая часть d6 рациональной мантиссы М в явном виде не записана) и под знак числа - один бит.Пусть для представления модулярных мантисс в модулярно-логарифмическом формате [〈m1, m2, …, mn〉, λ, Lmin, Lmax, σ] используется три основания: р1=11, р2=13, р3=15. Диапазон представления чисел Р=11⋅13⋅15=2145. Разрядность оснований q=4, разрядность интервальной логарифмической характеристики r=5.
Пример 1: необходимо перевести число X=3.312510=[1.65625, 1, 0]=-10⋅1.65625⋅21, представленное в двоичном формате [М, е, S], в модулярно-логарифмический формат [〈m1, m2, …, mn〉, Lmin, Lmax, λ, σ].
С учетом принятых характеристик двоичного формата [М, е, S], число X будет записано в памяти ЭВМ в виде двоичного вектора 〈0100010101〉. Для его преобразования в модулярно-логарифмический формат (2) необходимо выполнить следующие действия:
1. Выделить составные части числа X: знак числа S=0, дробная часть рациональной мантиссы d5…d2d1=101012, смещенный (избыточный) порядок Е=10002=8.
2. Восстановить целую часть d6 мантиссы М=d6d5…d2d1:d6=1, т.к. Е>0, следовательно, М=1.101012.
3. Определить порядок е: е=Е-еmax=8-7=1, т.к. Е>0.
4. Определить знак σ, перемещенный позиционный порядок λ и целочисленную мантиссу М': σ=1, λ=е-t+1=1-6+1=-4, М'=d6d5…d2d1=1101012=53.
5. Найти модулярную мантиссу : .
6. Вычислить интервально-логарифмическую характеристику мантиссы Lmin, Lmах: Lmin=[log2(53)⋅25-3-1]=11, Lmax=11+1=12.
В результате получается число X, представленное в модулярно-логарифмическом формате с плавающей точкой: X=[〈9, 1, 8〉, 11, 12, -4, 1].
Пример 2: необходимо перевести число X=0.0278320312510=[1.78125, -5, 1]=-11⋅1.78125⋅2-5 из двоичного формата [М, е, S] в модулярно-логарифмический формат [〈m1, m2, …, mn〉, Lmin, Lmax, λ, σ].
С учетом принятых характеристик двоичного формата [М, е, S], число X будет записано в памяти ЭВМ в виде двоичного вектора 〈1000111001〉. Для его преобразования в модулярно-логарифмический формат (2) необходимо выполнить следующие действия:
1. Выделить составные части числа X: знак числа S=1, дробная часть d5…d2d1=110002, смещенный порядок Е=00012=1.
2. Восстановить целую часть d6 мантиссы М=d6d5…d2d1:d6=1, т.к. Е>0, следовательно, М=1.110012.
3. Определить порядок е. е=еmin=1-7=-6, т.к. Е=0.
4. Определить знак σ, перемещенный порядок λ и целочисленную мантиссу М': σ=-1, λ=e-t+l=-6-6+1=-11, М'=d6d5…d2d1=1110012=57.
5. Найти модулярную мантиссу :
6. Вычислить интервально-логарифмическую характеристику мантиссы Lmin, Lmax: Lmin=log2(57)⋅25-3-1]=11, Lmax=11+1=12.
В результате получается число X, представленное в модулярно-логарифмическом формате с плавающей точкой: X=[〈2, 5, 12〉, 11, 12, -11, -1].
Алгоритм 1. Вычисление ранга числа, представленного в модулярно-логарифмическом формате.
Пусть - число, представленное в модулярно-логарифмическом формате с плавающей точкой, где - модулярная мантисса числа А. Для того чтобы найти ранг R модулярной мантиссы , необходимо:
1. Вычислить значение минимальной величины ранга Rmin модулярной мантиссы : , где , , мультипликативная инверсия Рi по модулю рi, , - наибольшее целое, не превышающее , - наибольшее целое, не превышающее , s - разрядность , при условии, что 2q-1<рi<2q, s>1+log2n.
2. Вычислить значение максимальной величины ранга Rmax модулярной мантиссы : где , - мультипликативная инверсия Рi по модулю рi, , - наибольшее целое, не превышающее , - наибольшее целое, не превышающее , s - разрядность , при условии, что 2q-1<рi<2q, s>1+log2n.
3. Если Rmin=Rmax, то R=Rmin, иначе выполнить сравнение: если , то есть значение мантиссы меньше половины максимально возможного значения, то R=Rmax, если , то есть значение мантиссы больше или равно половине максимально возможного значения, то R=Rmin, где LР/2=LР-2r-h-1, , , r - разрядность интервальной логарифмической характеристики числа .
Пример: необходимо вычислить ранги чисел A=53 и B=57. Используется три основания: р1=11, р2=13, р3=15. Р=р1⋅р2⋅р3=2145 - произведение оснований (верхний предел допустимого диапазона представления модулярных мантисс). , , , , , . Разрядность оснований q=4. Разрядность коэффициентов wi:s=5.
Значения верхних и нижних границ , коэффициентов для значений модулей р1=11, р2=13, р3=15 равны соответственно , , , , , .
Значения мультипликативных инверсий для модулей р1=11, р2=13, р3=15 равны соответственно , , .
Вычислим значение ранга первого числа.
1. Вычислим значение минимальной величины ранга Rmin модулярной мантиссы:
2. Вычислим значение максимальной величины ранга Rmax модулярной мантиссы:
3. Так как Rmin=Rmax, то RA=Rmin=1. Вычислим значение ранга второго числа.
Вычислим значение ранга второго числа.
1. Вычислим значение минимальной величины ранга Rmin модулярной мантиссы:
2. Вычислим значение максимальной величины ранга Rmax модулярной мантиссы:
3. Так как Rmin=Rmax, то RB=Rmin=1.
Алгоритм 2. Деление модулярной мантиссы числа, представленного в модулярно-логарифмическом формате, на число 2x (масштабирование степенью двойки).
Пусть - число, представленное в модулярно-логарифмическом формате с плавающей точкой, где - модулярная мантисса числа А. Для того чтобы найти результат деления модулярного числа на позиционное число 2x, необходимо:
1. Вычислить α. Если x>q-1, то вычислить значение , где - наименьшее целое, не превышающее , α=|х|q-1; если x≤q-1, то α=х.
2. Вычислить значение ранга R для модулярного числа в соответствии с алгоритмом 1.
3. Вычислить остаток от деления модулярного числа на рn+1=2q-1:
где , , - мультипликативная инверсия Рi по модулю рi.
Если 0<α<q-1, то , если α=0, то уменьшить j на 1.
4. Вычислить значение , для чего вычесть из каждого значения знакопозиций модулярного числа значение остатка от деления на 2α
.
5. Вычислить значение , для чего умножить каждое значение знакопозиций модулярного числа на мультипликативные инверсии 2α по соответствующим модулям.
,
где - мультипликативная инверсия числа 2α по модулю рi - результат сравнения .
6. Если , то прибавить к величину .
7. Шаги 2-6 выполнить j раз для α=q-1.
Пример. Необходимо разделить числа А=53 и В=57 на число 21. Используется три основания: р1=11, р2=13, р3=15. Р=р1⋅р2⋅р3=2145 - произведение оснований (верхний предел допустимого диапазона представления модулярных мантисс), , . Разрядность оснований q=4.
Значения мультипликативных инверсий для модулей р1=11, р2=13, р3=15 равны соответственно , , .
Значения мультипликативных инверсий по модулям р1=11, р2=13, р3=15 и для значений α=1, 2, 3 равны соответственно ; ; ; ; ; ; ; .
Значения остатков от деления и на 2α для значений модулей р1=11, р2=13, р3=15 и для значений α=1, 2, 3 равны соответственно
; ; ;
; ; ;
; ; ;
; ; ;
Вычисляем значение .
1. α=x=1, так как x=1<q=4-1.
2. Вычисляем ранг числа A=53 соответствии с алгоритмом 1. RA=1.
3. Вычисляем остаток от деления модулярного числа на 24-1=8:
.
Вычисляем остаток от деления модулярного числа на р4=21 .
4. Вычитаем из модулярного числа модулярное значение остатка от деления на 2 :
5. Умножаем на мультипликативные инверсии двойки по соответствующим модулям:
6. Прибавляем квеличину 1=(1, 1, 1), так как :
Вычисляем значение
1. α=х=1, так как х=1<q=4-1.
2. Вычисляем ранг числа В=57 соответствии с алгоритмом 1. RB=1.
3. Вычисляем остаток от деления модулярного числа на 24-1=8:
Вычисляем остаток от деления модулярного числа на р4=21
4. Вычитаем из модулярного числа модулярное значение остатка от деления на 2 :
5. Умножаем на мультипликативные инверсии двойки по соответствующим модулям:
.
6. Прибавляем к величину 1=(1, 1, 1), так как :
Алгоритм 3. Выполнение операции умножения с плавающей точкой в модулярно-логарифмическом формате. Для того чтобы найти произведение чисел и , представленных в модулярно-логарифмическом формате с плавающей точкой, необходимо:
1. Проверить результат на равенство 0. Если σС=σА⋅σВ=0, что означает равенство нулю одного из операндов или обоих операндов сразу, то
.
Если оба операнда ненулевые, то перейти к следующему шагу.
2. Присвоить знак произведению σС=σА⋅σВ. Определить верхнюю и нижнюю границы интервальной логарифмической характеристики результата , . Определить порядок результата λС=λА+λВ.
3. Проверить выход результата за границы диапазона представления чисел. Если , то
. Если ,то. Если и , то перейти к следующему шагу.
4. Проверить выход мантиссы результата за границы диапазона представления модулярных мантисс и выполнить умножение модулярных мантисс.
4.1. Если , то выполнить коррекцию операндов следующим образом:
4.1.1. Вычислить значения поправочных коэффициентов L1 и L2: , , где - наибольшее целое, не превышающее , - наибольшее целое, не превышающее
Если |L1|≤|L2| и L2≥0, то zА=L1, zВ=0.
Если |L1|≤|L2| и L2<0, то zА=0, zВ=L1.
Если |L1|>|L2|и |L1+L2|2=1, то , .
Если |L1|>|L2|и |L1+L2|2=0, то., .
4.1.2. Вычислить значения скорректированных мантисс и операндов и скорректировать значение верхней и нижней границы интервальной логарифмической характеристики результата.
Если и I, то , .
Если и , то , , если , то .
Если и, то, , если , то .
Если и , то , если , то .
Если и , то , если , то .
Если и , то , , если , то , иначе .
Если и , то , , если то если , то .
Если и , то , , если , то , если , то .
Если и , то , , если , то , иначе .
4.1.3. Скорректировать значение порядка результата λC=λC+L1.
4.1.4. Скорректировать значение верхней и нижней границы интервальной логарифмической характеристики результата если , то , иначе ;
4.2. Выполнить умножение модулярных мантисс путем нахождения значений , где - наибольшее целое, не превышающее
4.3. Если и , то выполнить коррекцию результата следующим образом.
4.3.1. Вычислить значение поправочного коэффициента .
4.3.2. Вычислить значение скорректированной мантиссы результата: .
4.3.3. Вычислить значение порядка результата λC=λC-zC.
4.3.4. Выполнить коррекцию значений верхней и нижней границы интервальной логарифмической характеристики результата , .
4.4. Если и , то выполнить коррекцию результата следующим образом:
4.4.1. Вычислить значение поправочного коэффициента .
4.4.2. Вычислить значение скорректированной мантиссы результата и скорректировать значение верхней и нижней границы интервальной логарифмической характеристики результата.
Если , то.
Если , то , если , то .
Если то если , то .
4.4.3. Вычислить значение порядка результата λС=λС+zС.
4.4.4. Выполнить коррекцию значений верхней и нижней границы интервальной логарифмической характеристики результата ; .
В результате выполнения данных операций получается произведение чисел и , представленное в модулярно-логарифмическом формате с плавающей точкой.
Пусть