Обращение элементов в GF(2^N) подсчётом континуанты

advertisement
СРАВНЕНИЕ АЛГОРИТМОВ ОБРАЩЕНИЯ
ЭЛЕМЕНТОВ GF(2^N)1
Щербаков А. В., студент кафедры системного программирования
СПбГУ
candiduslynx@gmail.com
Аннотация
В работе рассматриваются алгоритмы обращения
элементов конечного поля 𝐺𝐹(2𝑁 ). Данная задача возникает
при восстановлении данных в RAID с числом контрольных
сумм больше двух.
Актуальность такой задачи возрастает с ростом числа
дисков в массиве, числа контрольных дисков, а так же с
ростом размера поля. Производилось сравнение таких
алгоритмов как возведение в степень, подсчёт континуанты, а
также деление с использованием ганкелевых матриц.
Введение
Во многих системах хранения данных, использующих технологию
RAID, расчёт контрольных сумм производится кодами Рида-Соломона с
помощью арифметики конечных полей размера 2𝑁 (поля Галуа 𝐺𝐹(2𝑁 )).
Использование этого поля удобно, так как операция сложения в нём – это
XOR, а умножение можно свести к сложениям и умножению на 𝑥.
Однако, кроме расчёта контрольных сумм, существует ещё и задача
восстановления данных при отказе одного или нескольких дисков. В такой
операции есть необходимость производить точное деление в рабочем поле
Галуа. Обычно, используется лишь 2 контрольные суммы, и количество
необходимых обратных элементов достаточно мало, чтобы быть
рассчитанным заранее и использоваться в последствие при расчётах.
Однако, с ростом размера поля Галуа, количества дисков в RAIDмассиве и дисков с контрольными суммами хранение таблиц обратных
элементов становится невозможным. Дело в том, что в общем случае
пришлось бы хранить таблицу обратных для всех элементов поля, а это
(для 𝐺𝐹(2𝑁 ), в котором каждый элемент можно однозначно представить Nбитным двоичным числом) составляет:
𝑁 ∗ 2𝑁 бит.
При 𝑁 = 32 получаем 16 Гб, что тяжело хранить в памяти.
1
Работа поддержана компанией RAIDIX
Обращение элементов в GF(2^N)
Как выглядит обратный элемент в 𝐺𝐹(2𝑁 )? 𝐺𝐹(2𝑁 ) – это поле,
построенное из кольца многочленов 𝑍2 [𝑥] по модулю неприводимого в
𝑍2 [𝑥] многочлена 𝑓 вида:
𝑓(𝑥) = 𝑥 𝑁 + 𝑝(𝑥), deg 𝑝(𝑥) < 𝑁.
Тогда, для любого 𝑎 ∈ 𝐺𝐹(2𝑁 ){0} существует 𝑎−1 ∈ 𝐺𝐹(2𝑁 )\{0}, такой
что:
𝑎 ∗ 𝑎 −1 ≡ 1 (𝑚𝑜𝑑 𝑓).
Обращение элементов в GF(2^N) возведением в степень
По умножению, 𝐺𝐹(2𝑁 )\{0} – это циклическая группа порядка 2𝑁 − 1,
поэтому справедливо соотношение:
𝑎 −1 = 𝑎 2
𝑁− 1
.
Сложность этого метода составляет 𝑂(𝑁 2 ), так как возведение в
такую степень можно проделать за 𝑂(𝑁)[1] и сложность умножения также
составляет 𝑂(𝑁). Это очень неэффективный способ, и приведён он лишь
для сравнения скорости остальных алгоритмов.
Обращение элементов в GF(2^N) подсчётом континуанты
Ещё один алгоритм обращения элементов в 𝐺𝐹(2𝑁 ) вытекает из
следующего соображения: 𝑓 – неприводим в 𝑍2 [𝑥], а само 𝐺𝐹(2𝑁 ) –
евклидово кольцо (то есть, можно делить с остатком), поэтому:
∀𝑎 ∈ 𝐺𝐹(2𝑁 )\{0}
НОД(𝑎, 𝑓) = 1.
Если мы напишем линейное представление НОД(𝑎, 𝑓), получим:
1 = 𝑓 ∗ 𝑞 + 𝑎 ∗ 𝑤 (𝑚𝑜𝑑 𝑓).
𝑓 ∗ 𝑞 ≡ 0(𝑚𝑜𝑑 𝑓) ⇒ 𝑎 ∗ 𝑤 ≡ 1(𝑚𝑜𝑑 𝑓) ⇒ 𝑤 = 𝑎 −1 .
Если в процессе нахождения НОД(𝑎, 𝑓) получаем последовательность
𝑞1 , … , 𝑞𝑠 – частные при делении с остатком – то 𝑤 можно представить в
виде:
𝑤 = 𝐾𝑠 (𝑞1 , … , 𝑞𝑠 ), где 𝐾𝑠 (𝑞1 , … , 𝑞𝑠 ) – это континуанта[2].
Для расчёта континуанты в данном случае удобно воспользоваться
рекуррентным соотношением[3]:
𝐾−1 = 0, 𝐾0 = 1,
𝐾𝑚+1 (𝑥1 , … , 𝑥𝑚 , 𝑥𝑚+1 ) = 𝑥𝑚+1 ∗ 𝐾𝑚 (𝑥1 , … , 𝑥𝑚 ) + 𝐾𝑚−1 (𝑥1 , … , 𝑥𝑚−1 ).
Сложность этого алгоритма напрямую зависит от числа шагов
нахождения НОД. Но само деление с остатком требует операции
логического сдвига, где можно столкнуться с трудностями при работе с
большими полями.
Обращение элементов в GF(2^N) с использованием
ганкелевых матриц
Ещё один алгоритм обращения был предоставлен профессором
СПбГУ Утешевым А. Ю. Суть алгоритма сводится к таким шагам:
1.
Из 𝑓 получается набор {𝑑𝑖 } – коэффициентов разложения
1
𝑓
в ряд
Лорана;
2.
Из {𝑑𝑖 } и обращаемого элемента 𝑎 получается последовательность
2∗(𝑁−1)
{𝑐𝑖 }𝑖=1
;
3.
Эта последовательность подается на вход алгоритм БерлекампаМесси, на выходе получаем набор коэффициентов обратного
элемента. 2
Сложность полученного алгоритма 𝑂(𝑁 2 ).
Сравнение скорости работы алгоритмов
Подсчёт
континуанты
Использование
ганкелевых
матриц
N (GF(2^N))
Возведение в
степень
8
1120
480
1181
16
4618
1576
2999
32
20707
6026
8191
64
83993
19169
22671
128
878762
158103
51344
5216242
1176736
182407
256
Таблица 1: Скорость работы алгоритмов обращения (в ts)
2
Более подробно про первые 2 шага алгоритма можно прочитать в [4].
График 1: Сравнение производительности алгоритмов обращения
Заключение
Из графиков очевидно, что обращение континуантой выгодно
использовать для полей с 𝑁 ≤ 64, а дальше – пользоваться последним
алгоритмом. Дело в том, что, хоть при расчётах и можно использовать
регистры длин 128 (SSE) или 256 (AVX), операция логического сдвига
всего регистра на 𝑘 разрядов пока что отсутствует, поэтому наблюдается
резкое падение производительности на 𝑁 > 64.
Литература
1.
2.
3.
4.
Кнут Д. Э. Искусство программирования. Т. 2: Полученные алгоритмы
/ Кнут Д. Э. // Издательство Вильямс — 2004. — С. 832
Лидл Р., Нидеррайтер Г. Конечные поля. Том 1. / Лидл Р., Нидеррайтер
Г. // М.Мир. — 1988.
Блейхут Р. Быстрые алгоритмы цифровой обработки сигналов. /
Блейхут Р. // М. Мир. — 1989
Uteshev A.Yu., Cherkasov T.M. The search for the maximum of a
polynomial. / Uteshev A.Yu., Cherkasov T.M. // J. Symbolic Computation.
— 1998. — Vol. 25, № 5. — P. 587-618.
Download