Кронштейн НЕОН и поли8_т и поли16_т

Недавно я изучал неоновую оптимизацию с помощью встроенных функций и натолкнулся на типы данных poly8_t и poly16_t. Мне тогда интересно, что же они собой представляют?

Я искал по всей сети, но до сих пор не смог найти ЛЮБОГО объяснения, что они такое.

Кто-нибудь может мне их объяснить?

редактироватьСпасибо за эти ответы, но почему, если это просто другой способ умножения и т. Д., У него совершенно другой тип данных?

7

Решение

Слева = регулярное умножение, справа = бесполезное умножение

        1 1 0 1                              1 1 0 1
*  1 0 0 1                              1 0 0 1
------------        -->              --------------
(1)1 1 0 1  <-- (1) is carry            1 1 0 1
0 0 0 0                              0 0 0 0
0 0 0 0                              0 0 0 0
1 1 0 1        +                     1 1 0 1         + GF(2) or XOR
-------------                        ---------------
1 1 1 0 1 0 1                        1 1 0 0 1 0 1

Каждый 1 или 0 в диагонально убывающей матрице представляет частичный продукт одного исходного бита из вектора ‘1101’ и одного исходного бита из другого вектора ‘1001’.

Правильное применение — в CRC, (ECC) вычислениях кода с исправлением ошибок (Reed Solomon, BCH) и криптографии (эллиптические кривые, внутренние компоненты AES).

Иллюстрируя связь с многочлен умножение, операция выше может быть суммирована как

 1101 == x^3 + x^2 + 0 + 1;
1001 == x^3 + 0   + 0 + 1;

Регулярное полиномиальное умножение: p (x) * (x ^ 3 + 1) == p (x) * x ^ 3 + p (x) ==

 (x^3 + x^2 + 1)(x^3 + 1) == x^6+x^5+x^3 + x^3+x^2+1
== 1x^6 + 1x^5 + 0x^4 + 2x^3 + 1^x2 + 0x + 1
== "1102101"

В GF (2) каждый коэффициент просто вычисляется по модулю 2, делая 1100101b.

Тип данных в GF выглядит так же, как uint8_t, uint16_t или, возможно, вплоть до 128_t, в том смысле, что тип данных для GF (2 ^ 8) содержит 256 уникальных битовых шаблонов. Однако, например, битовый паттерн ‘00010001’, например не имеет традиционной интерпретации. (Это не 17 знаков после запятой, а, возможно, 123-я степень «единицы» по модулю некоторого другого многочлена.) Умножение этого числа с тем же «единицей» по модулю полинома генератора g (x) приводит к 124-й степени и так далее. Тогда свойства (тождества) конечных полей имеют просто интересные приложения — такие, что можно (удаленно) легко вычислить, какое 32-разрядное число добавить в файл, чтобы сопоставить его 32-разрядный CRC; или можно использовать свойства для распараллеливание вычисления crc, или для реализации умножения Бигнума с Фурье-подобным преобразованием в конечных полях (числовое теоретическое преобразование).

8

Другие решения

Эти типы используются для умножения без переноса. Это полезно для криптографических алгоритмов и хэш-сумм CRC. Вот некоторые технические документы о приложениях (они исследуют инструкцию x86 PCLMULQDQ, но те же идеи применимы к умножению без переноса на процессорах ARM):

6

Вы не описали PMUL против PMULL.

Насколько я понимаю (возможно неправильно) каждый элемент
PMUL работает на двух 8-битных элементах источника и генерирует один
8-битный элемент результата.

Каждый PMUL на элемент генерирует 8 частичных произведений и
каждый PP сдвинут соответственно перед XORed. Так из
lsb первого PP к msb последнего PP.
Кажется, есть 15-битный результат. PMUL может хранить только
8-битный результат.

Отбрасываются ли наиболее значимые 7-битные 15-битные результаты?

2

Как ссылка, это из Руководство программиста серии Cortex-A (v4) глава 7.2.2:

Полиномиальная арифметика полезна при реализации определенной криптографии
или алгоритмы целостности данных.

Добавление двух полиномов над {0,1} аналогично побитовому исключению
ИЛИ ЖЕ. Полиномиальные дополнительные результаты в разных значениях
обычное дополнение.

Умножение двух полиномов на {0,1} включает в себя сначала определение
частичные продукты, как в обычном умножении, а затем частичные
продукты являются эксклюзивными ORed вместо того, чтобы быть добавленными обычным способом.
Полиномиальное умножение приводит к различным значениям по сравнению с обычным
умножение, потому что это требует полиномиального сложения частичного
товары.

1
По вопросам рекламы [email protected]