Умножение Монтгомери - 32-битный регистр против 64-битного регистра
Мне нужно рассчитать разницу в скорости между выполнением страницы умножения Монтгомери 602-603 с размером слова / регистром размера 32 против 64.
Пока это то, что я понимаю:
- x и y представлены массивами из нескольких слов длиной n, где n = m/w, а w - размер регистра (32 или 64).
- Общее число однозначных умножений в умножении Монтгомери составляет n*(2 + 2*n), где n представляет длину числа массивов слов.
- Я предполагаю, что умножение двух однозначных чисел занимает 1 такт на каждом из компьютеров.
Как я могу собрать все это вместе, чтобы представить количество тактов, необходимых для умножения Монтгомери на компьютере с 32-разрядным регистром или 64-разрядным регистром?
0 ответов
Количество циклов для умножения Монтгомери с множественной точностью действительно будет n(2+2*n)
если бы все промежуточные операнды и результаты умножения одинарной точности были доступны в регистрах. Для криптографических операций это вряд ли возможно, так как m
обычно 1024 или больше. Предполагая, что 32-битные регистры (xy R ^ -1 mod m) потребуют 192 регистра только для хранения операндов (3*(1024/32)). На самом деле вам нужно принять во внимание доступ к памяти, чтобы ответить на этот вопрос.
Переписать алгоритм с обращениями к памяти (при условии, что умножения могут выполняться параллельно с загрузкой / хранением):
- За
i
от 0 до n:a_i <- 0
- За
i
от 0 до (n-1) сделать следующее:- получать
a_0
- получать
y_0
- получать
x_i
- вычисление
u_i <- (a_0 + x_i*y_0)m' mod b
, хранитьu_i
в реестре c = 0
(ВычислительныйA <- (A + x_i*y + u_i*m)/b
)- за
j
от 0 до (n-1):- получать
a_j
- получать
y_j
- вычисление
(cv) = a_j + x_i*y_j + c
, Выборкаm_j
- вычисление
(cv) = (cv) + u_i*m_j
, если j>0 Storea_{j-1} <- v
- получать
- хранить
a_n <- c
а такжеa_{n-1} <- v
- получать
- Если
A >= m
затемA <- A − m
, - Возвращение (A).
Надеюсь это поможет.