Рекурсивная модулярная арифметика — различия между версиями
Isaeva (обсуждение | вклад) |
Isaeva (обсуждение | вклад) |
||
Строка 34: | Строка 34: | ||
Получаем <math>p_{i}-1 < 32 </math>. | Получаем <math>p_{i}-1 < 32 </math>. | ||
− | Выбираем <math>p_{i} = 31 </math>. | + | Выбираем <math>p_{i} = 31 </math>. |
+ | |||
Аналогичным расчетом реализуем рекурсивное дерево рабочих оснований целиком. | Аналогичным расчетом реализуем рекурсивное дерево рабочих оснований целиком. | ||
Чтобы сделать такое устройство, нужно спроектировать блок из 6 вычислителей (для каждого базисного модуля) и таких блоков нужно будет 16. Вот где работает регулярность. | Чтобы сделать такое устройство, нужно спроектировать блок из 6 вычислителей (для каждого базисного модуля) и таких блоков нужно будет 16. Вот где работает регулярность. | ||
Строка 50: | Строка 51: | ||
Идея, на которой базируется рекурсивная модулярная арифметика: выразить систему модулей через систему субмодулей, имеющую меньшую размерность. | Идея, на которой базируется рекурсивная модулярная арифметика: выразить систему модулей через систему субмодулей, имеющую меньшую размерность. | ||
− | Пусть задана система модулей <math> | + | Пусть задана система модулей <math> p_1, p_2, \ldots, p_i, \ldots , p_n </math> и задан некоторый вектор <math> A = (a_1, a_2, \ldots , a_n) </math>. Выразим <math> a_i </math> через систему субмодулей |
− | Назовем систему из m младших модулей системой базовых модулей, а их произведение обозначим <math> Q = (p_1 \cdot p_2 \cdot \ldots \cdot p_m) </math> . Пусть <math> P_{i,1} = p_i, p_{i,2} = p_2, \ldots , p_{i,i-1} = p_{i-1} </math> , а <math> k = i-1 </math> , тогда при <math> i = m+1, \ldots , n </math> имеет место рекурсия. <math> a_i = (a_1, a_2, \ldots , a_m, a_{m+1}, \ldots , a_{i-1}) </math> по системе модулей <math> p_1, p_2, \ldots , p_m, p_{m+1}, \ldots , p_{i-1} | + | :<math> p_i = (p_{i,1}, p_{i,2}, \ldots , p_{i,k}) </math> , где <math> P_i = p_{i,1}, p_{i,2}, \ldots , p_{i,k} </math> и <math> a_i < P_i </math> : <math> a_i = (a_{i,1}, a_{i,2}, \ldots , a_{i,k}) </math> . |
+ | |||
+ | В этом случае вектор A можно представить в следующем виде: | ||
+ | |||
+ | :<math> (a_1, a_2, \ldots , a_{i-1}, (a_{i,1}, a_{i,2}, \ldots , a_{i,k}), a_{i+1}, \ldots , a_n) </math> , см. рис. 1. | ||
+ | |||
+ | Назовем систему из m младших модулей системой базовых модулей, а их произведение обозначим <math> Q = (p_1 \cdot p_2 \cdot \ldots \cdot p_m) </math> . | ||
+ | |||
+ | Пусть <math> P_{i,1} = p_i, p_{i,2} = p_2, \ldots , p_{i,i-1} = p_{i-1} </math> , а <math> k = i-1 </math> , тогда при <math> i = m+1, \ldots , n </math> имеет место рекурсия. <math> a_i = (a_1, a_2, \ldots , a_m, a_{m+1}, \ldots , a_{i-1}) </math> по системе модулей <math> p_1, p_2, \ldots , p_m, p_{m+1}, \ldots , p_{i-1} </math> или, раскрывая рекурсию: <math> a_i = (a_1, a_2, \ldots , a_m, (a_{m+1,1}, a_{m+1,2}, \ldots , a_{m+1,m} ), \ldots) </math> . На рис.2 приведен частный случай разложения элемента <math> a_i </math> для случая <math> n=6 </math> и <math> m=3 </math>. | ||
Строка 58: | Строка 67: | ||
Если в традиционной модулярной арифметике число элементов вектора равно числу элементов в системе модулей, то в рекурсивной модулярной арифметике количество элементов вектора увеличивается в зависимости от заданных <math>n</math> и <math>m</math> . | Если в традиционной модулярной арифметике число элементов вектора равно числу элементов в системе модулей, то в рекурсивной модулярной арифметике количество элементов вектора увеличивается в зависимости от заданных <math>n</math> и <math>m</math> . | ||
− | Очевидно, что каждый из первых <math>m</math> элементов представляется в виде одного числа. <math>(m+1)</math>-й элемент содержит <math>m</math> элементов, поскольку выражается через <math>m</math> элементов системы субмодулей: <math> a_{m+1} = (a_{m+1,1}, a_{m+1,2}, \ldots , a_{m+1,m}) </math> . <math>(m+2)</math>-й элемент содержит <math>2 \cdot m</math> элементов, поскольку выражается через <math>m</math> элементов системы субмодулей и <math>m</math> элементов вектора<math> a_{m+1} </math> . Таким образом, продолжая рассуждения, можно заключить, что число элементов <math> L_i </math> для вектора <math> a_i </math> может быть выражено следующей формулой: | + | Очевидно, что каждый из первых <math>m</math> элементов представляется в виде одного числа. <math>(m+1)</math>-й элемент содержит <math>m</math> элементов, поскольку выражается через <math>m</math> элементов системы субмодулей: |
+ | |||
+ | :<math> a_{m+1} = (a_{m+1,1}, a_{m+1,2}, \ldots , a_{m+1,m}) </math>. | ||
+ | |||
+ | <math>(m+2)</math>-й элемент содержит <math>2 \cdot m</math> элементов, поскольку выражается через <math>m</math> элементов системы субмодулей и <math>m</math> элементов вектора <math> a_{m+1} </math> . Таким образом, продолжая рассуждения, можно заключить, что число элементов <math> L_i </math> для вектора <math> a_i </math> может быть выражено следующей формулой: | ||
− | <math>L_i = \{ 1, i \le m ; 2^{i-m-1} \cdot m, m<i<n </math> | + | :<math>L_i = \begin{cases} |
+ | 1, & \mbox{if } i \le m ; \\ | ||
+ | 2^{i-m-1} \cdot m, & \mbox{if } m<i<n | ||
+ | \end{cases} | ||
+ | </math> | ||
Общее же число элементов<math> L </math>вектора <math> A </math> можно рассчитать, воспользовавшись формулой суммы геометрической прогрессии: | Общее же число элементов<math> L </math>вектора <math> A </math> можно рассчитать, воспользовавшись формулой суммы геометрической прогрессии: | ||
− | <math>L = \sum_{i=1}^{n} L_i = m+m \cdot (2^0+2^1+ \ldots +2^{n-m+1}) = m \cdot (1+ \frac{2^{n-m}-1}{2-1}) = 2^{n-m} \cdot m </math> | + | :<math>L = \sum_{i=1}^{n} L_i = m+m \cdot (2^0+2^1+ \ldots +2^{n-m+1}) = m \cdot (1+ \frac{2^{n-m}-1}{2-1}) = 2^{n-m} \cdot m </math> |
== Ограничения на выбор базиса == | == Ограничения на выбор базиса == |
Версия 08:04, 29 апреля 2014
Содержание
Принцип рекурсивных модулярных вычислений
Рекурсивная модулярная арифметика основана на принципе глубокого распараллеливания модульных операций модулярной арифметики с основаниями посредством сведения модульных операций по каждому рабочему основанию , к модульным вычислениям по предшествующим рабочим основаниям , имеющим то или иное технологическое преимущество (например, малобитным), которые называются базисными основаниями. Такая редукция допустима только при выполнении так называемого условия согласования вычислительных диапазонов по каждому рабочему модулю с вычислительными диапазонами по соответствующим комплексам базисных оснований. Принцип согласования гарантирует, во-первых, изоморфизм кольцевых операций по соответствующим им комплексам базисных оснований, и во-вторых, выполнимость обращения каждого шага рекурсии посредством перевода соответствующих модулярных кодов по базисным основаниям в позиционный код (например, на основе китайской теоремы об остатках, или переводом их в полиадический код). Несмотря на ограничения, которые накладываются на систему модулей, предложенный метод обеспечивает выигрыш по скорости и может быть применен в параллельных высокоскоростных вычислительных устройствах.
Пример
Поясним процедуру рекурсивных преобразований на простом примере. Возьмем в качестве базисных модулей двухбитные простые числа . Очевидно, что вычетами по модулям 2 и 3 можно однозначно представить любой вычет по модулю 5. В то же время вычетами по модулям 2, 3 и 5, где вычеты по модулю 5 представимы по модулям 2 и 3, можно однозначно представить любой вычет по модулю 29. Вычетами по модулям 2, 3, 5 и 29 можно однозначно представить любой вычет по модулю 863. И так далее пока не получим нужный набор рабочих оснований: 2, 3, 5, 29, 863,… Данный пример наглядно иллюстрирует 4 факта:
1) Аппаратные и временные затраты на представление чисел по базовым модулям 2 и 3 примерно одинаковы (оба базисных модуля двухбитные);
2) Наблюдается более высокая степень распараллеливаемости;
3) Появляется регулярность (все вычисления проводятся по модулям 2 и 3);
4) Столь малая разрядность базовых модулей позволяет эффективно реализовать модульные операции по базисным модулям в комбинационных схемах.
Однако имеется ряд ограничений, которые должны быть выполнены и которые приводят к усложнению устройств, созданных по данной методике. Рассмотрим эти ограничения.
Пусть есть система базисных модулей и необходимо представить вычеты по модулю через вычеты по этой системе базовых модулей. Очевидно, что максимальный вычет по модулю равен . Зная это значение и последовательность выполняемых операций, можно рассчитать максимальное значение результата арифметической операции. Очевидно, что для однозначного представления результата арифметических операций необходимо, чтобы , где . Для остальных модулей расчет производится аналогично.
Для примера с базовыми модулями 2 и 3 . Наименьшее простое число (после 2 и 3) - это 5, следовательно, . Нельзя выполнить ни операцию сложения, т.к. , ни, тем более, операцию умножения, т.к. . Чтобы выполнять любую из арифметических операций (сложение или умножение) надо увеличить число (т.е. увеличить значения базисных модулей и/или их количество).
Возьмем в качестве базисных модулей все взаимно простые трехбитные числа: 4, 5 и 7. В этом случае .
Таким образом, выбираем (ближайшее к 7 простое число). Далее совокупность рабочих модулей строится с помощью аналогичного расчета, пока не будет достигнут требуемый вычислительный диапазон.
Наконец рассмотрим реальный случай. Пусть нам нужно реализовать преобразователь Фурье для 24-битных аргументов при количестве точек 1024. Для этого потребуется вычислять сумму 1024 произведений, т.е. обеспечить . Здесь уже не обойтись системой только трехбитных базисных модулей. Добавим к ним четырехбитные: 5, 7, 8, 9, 11 и 13 (Q = 360360). Для выбора ближайшего рабочего модуля необходимо .
Получаем . Выбираем .
Аналогичным расчетом реализуем рекурсивное дерево рабочих оснований целиком. Чтобы сделать такое устройство, нужно спроектировать блок из 6 вычислителей (для каждого базисного модуля) и таких блоков нужно будет 16. Вот где работает регулярность. Заметим, что все вычислители будут иметь высокую скорость модульных операций (суперраспараллеливание) и небольшие аппаратные затраты в силу малости базисных модулей или их близости к степеням двойки.
Таким образом, предложенный аппарат рекурсивных модулярных вычислений дает следующие преимущества:
- 1. Устранение дисбаланса в операциях с малыми и большими модулями (аппаратные и временные затраты примерно одинаковы, т.к. в идеале все базисные модули имеют одинаковое число бит).
- 2. Существенно более высокая степень распараллеливаемости, а значит и более высокое быстродействие.
- 3. Появляется регулярность (большое количество одинаковых базисных модулей).
- 4. Малая разрядность базисных модулей позволяет реализовать модульные операции на комбинационных схемах, оптимизированных в базисе булевых функций.
Представление данных и основные операции рекурсивной модулярной арифметики
Идея, на которой базируется рекурсивная модулярная арифметика: выразить систему модулей через систему субмодулей, имеющую меньшую размерность.
Пусть задана система модулей и задан некоторый вектор . Выразим через систему субмодулей
- , где и : .
В этом случае вектор A можно представить в следующем виде:
- , см. рис. 1.
Назовем систему из m младших модулей системой базовых модулей, а их произведение обозначим .
Пусть , а , тогда при имеет место рекурсия. по системе модулей или, раскрывая рекурсию: . На рис.2 приведен частный случай разложения элемента для случая и .
Прямое преобразование числа из позиционной системы счисления в представление рекурсивной модулярной арифметики
Если в традиционной модулярной арифметике число элементов вектора равно числу элементов в системе модулей, то в рекурсивной модулярной арифметике количество элементов вектора увеличивается в зависимости от заданных и . Очевидно, что каждый из первых элементов представляется в виде одного числа. -й элемент содержит элементов, поскольку выражается через элементов системы субмодулей:
- .
-й элемент содержит элементов, поскольку выражается через элементов системы субмодулей и элементов вектора . Таким образом, продолжая рассуждения, можно заключить, что число элементов для вектора может быть выражено следующей формулой:
Общее же число элементоввектора можно рассчитать, воспользовавшись формулой суммы геометрической прогрессии: