Статья:

Методы ускорения деления целых чисел большой разрядности

Конференция: V Международная заочная научно-практическая конференция «Научный форум: инновационная наука»

Секция: Технические науки

Выходные данные
Чурсин В.Б. Методы ускорения деления целых чисел большой разрядности // Научный форум: Инновационная наука: сб. ст. по материалам V междунар. науч.-практ. конф. — № 4(5). — М., Изд. «МЦНО», 2017. — С. 64-73.
Конференция завершена
Мне нравится
на печатьскачать .pdfподелиться

Методы ускорения деления целых чисел большой разрядности

Чурсин Вячеслав Борисович
канд.физ.-мат. наук, доц., ФБГОУ ВО «Самарский университет путей сообщения», (филиал) в г. Орске, РФ, г. Орск

 

Аннотация. В статье рассматривается методы, которые позволяют уменьшить время выполнения для алгоритма деления целых чисел большой разрядности. Интерес к данной теме основан на том, что арифметика с числами большой разрядности широко используется в системах с ассиметричным шифрованием и в алгоритмах, связанных с факторизацией больших целых чисел.

Abstract. The article considers methods that allow to reduce the execution time for the algorithm of division of integers of large digit capacity. Interest in this topic is based on the fact that arithmetic with large-digit numbers is widely used in systems with asymmetric encryption and in algorithms related to the factorization of large integers.

 

Ключевые слова: алгоритм деления, методы ускорения для алгоритма деления больших чисел.

Keywords: Algorithm of division, acceleration methods for the algorithm of division of large numbers.

 

Задача оптимизации деления целых чисел большой разрядности (далее ЦБР-числа) – одна из наиболее важных и сложных вычислительных задач длинной арифметики. В статье рассматриваются методы ускорения операции деления ЦБР-чисел на примере алгоритма деления «столбиком», который реализован с помощью операций вычитания и сдвига.

Рассмотрим классический алгоритм деления «столбиком» (a>0, b>0, a>b), который представлен Алгоритмом 1.

Операции div, mod, shl(n) и shr(n) – операции получения частного и остатка от деления, сдвиговые операции смещения влево и вправо на n разрядов соответственно (по основанию radix), процедура Sub(a, b, R) вычисляет результат R = ab, функция Comp(a, b) вычисляет следующий результат:

С целью повышения эффективности вычислений в данный алгоритм деления ЦБР-чисел внесем следующие изменения в структуру данных и алгоритм вычислений:

1)  «реальные» сдвиговые операции shl и shr (по основанию radix) заменяются виртуальными сдвигами;

Под термином «реальные» будем понимать преобразования, которые изменяют структуру данных ЦБР-числа. Под виртуальным сдвигом будем понимать преобразование, которое не изменяет структуру данных ЦБР-числа. В приведённом алгоритме деления имеем дело с «реальными» сдвиговыми операциями, так как изменяется структура данных ЦБР-числа – длина числа;

2)  в ходе выполнения алгоритма изменяется основание системы счисления radix.

В первом случае, для того чтобы заменить реальные операции сдвига виртуальными, достаточно в структуру данных внести следующие изменения:

·     ввести в структуру данных ЦБР-числа дополнительные поля LSB и MSB, которые хранят начальный и конечный адреса данных ЦБР-числа. Введение таких полей позволяет не только более эффективно определять количество сдвигов, которые необходимо производить при делении и других арифметических операциях с ЦБР-числами, но и эффективно производить сравнение таких чисел.

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

·     длина делимого ЦБР-числа изменяется в диапазоне от 1000 до 1200 байтов (radix-256);

·     длина делителя ЦБР-числа – один байт.

Таблица 1.

Сравнительные характеристики алгоритма деления с реальными и виртуальными сдвигами

Длина делимого числа,

байт

Типы сдвиговых операций

1000

1025

1050

1075

1100

1125

1150

1175

1200

Время выпол-нения, с

виртуальные сдвиги

0,016

0,016

0,016

0,016

0,016

0,016

0,016

0,016

0,016

реальные сдвиги

1,047

1,031

1,078

1,140

1,234

1,250

1,266

1,297

1,391

 

Соответствующие данные из таблицы 1 представлены на диаграмме рисунка 1.

 

Рисунок 1. Сравнительные характеристики алгоритма деления с реальными и виртуальными сдвигами

 

Во втором случае можно повысить эффективность операции деления, изменяя основание системы счисления. В самом деле, анализируя текст алгоритма 1, можно отметить, что наиболее критичной характеристикой, оказывающей наибольшее влияние на эффективность алгоритма деления, являются строки 9–12. Данный фрагмент алгоритма представляет собой итеративный процесс приближения значения числа a к значению числа d. Естественно, что количество операций вычитания – это основной параметр, который влияет на эффективность всего алгоритма деления. Таким образом, задача состоит в том, чтобы уменьшить количество операций вычитания (за счет более эффективного выравнивания ЦБР-чисел по старшим разрядам) и, как результат, повысить эффективность операции деления ЦБР-чисел. Поясним данный метод на следующем примере.

Пусть минимальным элементом хранения данных в числах a и b будет блок в 8 бит. Тогда системой счисления для ЦБР-числа будет 256-ричная система счисления (radix-256=28). Пусть длина делимого ЦБР-числа (число a) составляет два байта, длина делителя (число b) – один байт (в соответствии с рисунком 2). Тогда в процессе деления числа a на число b будет выполнено 255 вычитаний для каждого из блоков, а всего – 510 вычитаний.

 

Рисунок 2. Распределение данных для чисел a и b, (radix-256=28)

 

Теперь изменим систему счисления и определим блок хранения данных в 4 бита. В этом случае системой счисления для ЦБР-числа будет 16-ричная система счисления (radix-16=24). Тогда при тех же исходных данных получим, что в процессе деления числа a на число b будет выполнены 15 операций вычитания для каждого из блоков (рисунок 3), а всего – 60 вычитаний.

 

Рисунок 3. Распределение данных для чисел a и b, (radix-16=24)

 

Очевидно, что при указанных выше исходных данных для чисел a и b для различных систем счисления получим следующую сводную таблицу (таблица 2):

Таблица 2.

Количество вычитаний при операции деления в различных системах счисления

Система счисления,

radix-X

Количество вычитаний,

CX

Коэффициент ускорения*,

C256/CX

radix-256

510

1,000

radix-16

60

8,500

radix-4

24

21,250

radix-2

16

31,875

*Следует отметить, что данный коэффициент ускорения носит достаточно искусственный характер (в силу выбранных данных), но, тем не менее, полностью отражает основную идею метода ускорения алгоритма деления ЦБР-чисел

 

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

В процессе вычислений переход к другой системе счисления можно осуществить различными способами:

способ 1 – осуществлять преобразования и вычисления на «месте» в пределах обрабатываемого блока данных;

способ 2 – предварительно преобразовать весь массив данных ЦБР-числа в массив данных с системой счисления с меньшим основанием, выполнить вычисления, а затем произвести обратное преобразование. В данной публикации рассматривается именно второй способ реализации.

Сущность метода, при котором осуществляется преобразование массива данных из системы счисления radix-256=28 в системы счисления radix-16=24 и radix-4=22, можно продемонстрировать с помощью рисунка 3 (при этом минимальным элементом хранения данных в массиве является по-прежнему один байт).

 

Рисунок 3. Преобразование данных из radix-256 в radix-16 и radix-4

 

Выбор второго варианта реализации обусловлен следующими причинами:

1)  высокой скоростью преобразования;

2)  минимальными изменениями в алгоритме деления ЦБР-чисел.

Следует, однако, отметить, что при данном способе преобразования и вычислений следует учитывать тот факт, что наименьшее основание системы счисления ещё не гарантирует наибольший прирост скорости выполнения алгоритма. В самом деле, пусть сложность алгоритма деления для системы счисления по основанию radix-2 составляет Q(mn) [1], где m, m+n – количество элементов в делителе и делимом ЦБР-числах соответственно. Тогда при переходе к системе счисления по основанию radix-4 следует ожидать, что сложность алгоритма деления составит k´Q(mn), где коэффициент k=31,875/21,250=1,5 (таблица 2), m=m/2, n=n/2. В результате получим k/4´Q(mn) = 0,375´Q(mn) в системе счисления по основанию radix-4. В реальности сложность алгоритма деления составила в среднем 0,8´Q(mn) в системе счисления по основанию radix-4 по отношению к системе счисления по основанию radix-2. Данные оценки получены по результатам тестирования (данные таблиц 3, 4 и соответствующие им диаграммы на рисунках 4 и 5).

В таблице 3 представлены следующие данные:

·     длина делимого ЦБР-числа изменяется в диапазоне от 1000 до 7000 байтов (radix-256);

·     длина делителя ЦБР-числа составляет 100 байтов.

Таблица 3.

Сравнительные характеристики алгоритма деления в различных системах счисления при возрастании размерности делимого ЦБР-числа

Делимое, байт

Системы счисления

radix-2, сек.

radix-4, сек.

radix-16, сек.

radix-256, сек.

radix-4/ radix-2

1000

0,125

0,047

0,078

0,281

0,376

1500

0,109

0,079

0,109

0,453

0,725

2000

0,125

0,125

0,14

0,625

1,000

2500

0,172

0,156

0,188

0,781

0,907

3000

0,203

0,156

0,219

0,937

0,768

3500

0,25

0,203

0,265

1,11

0,812

4000

0,281

0,234

0,297

1,266

0,833

4500

0,312

0,266

0,343

1,438

0,853

5000

0,359

0,297

0,391

1,609

0,827

5500

0,391

0,312

0,422

1,719

0,798

6000

0,422

0,344

0,469

1,922

0,815

6500

0,454

0,39

0,5

2,094

0,859

7000

0,5

0,406

0,547

2,281

0,812

 

Соответствующая диаграмма представлена на рисунке 4.

 

Рисунок 4. Сравнительные характеристики алгоритма деления в различных системах счисления при возрастании размерности делимого ЦБР-числа

 

В таблице 4 представлены следующие данные:

·     длина делителя ЦБР-числа изменяется в диапазоне от 100 до 800 байтов (radix-256);

·     длина делимого ЦБР-числа составляет 1000 байтов.

Таблица 4.

Сравнительные характеристики алгоритма деления в различных системах счисления при возрастании размерности делителя ЦБР-числа

Делитель, байт

Системы счисления

radix-2, сек.

radix-4, сек.

radix-16, сек.

radix-256, сек.

radix-4/ radix-2

100

0,141

0,078

0,062

0,297

0,553

150

0,094

0,062

0,109

0,422

0,660

200

0,110

0,078

0,125

0,500

0,709

250

0,140

0,110

0,140

0,610

0,786

300

0,156

0,125

0,156

0,656

0,801

350

0,172

0,125

0,188

0,750

0,727

400

0,172

0,141

0,187

0,766

0,820

450

0,172

0,140

0,187

0,813

0,814

500

0,187

0,141

0,187

0,797

0,754

550

0,188

0,140

0,188

0,797

0,745

600

0,157

0,140

0,188

0,750

0,892

650

0,187

0,141

0,172

0,765

0,754

700

0,156

0,110

0,157

0,703

0,705

750

0,125

0,110

0,140

0,625

0,880

800

0,125

0,094

0,125

0,531

0,752

 

Соответствующая диаграмма представлена на рисунке 5.

 

Рисунок 5. Сравнительные характеристики алгоритма деления в различных системах счисления при возрастании размерности делителя ЦБР-числа

 

Результаты:

По результатам тестирования были получены следующие результаты:

· возможность ускорения последовательного алгоритма деления «столбиком» для ЦБР-чисел за счет использования механизма виртуальных сдвигов и использования различных систем счисления;

· коэффициент ускорения k находится в диапазоне 4£k£6 для различных систем счисления.

Выводы:

Анализируя полученные результаты можно сделать следующие выводы:

· для получения ускорения алгоритма деления «столбиком» достаточно перейти к системе счисления с меньшим основанием radix-X;

· оптимальным выбором системы счисления, при которой наблюдается наибольший коэффициент ускорения, является 4-ричная (radix-4) система счисления.

 

Список литературы:
1. Молдовян Н. А., Молдовян А. А., Еремеев М. А. Криптография. От примитивов к синтезу алгоритмов. С-Пб.: БХВ-Петербург, 2004 г. – 505 с.