Goz*_*Goz 7 c c++ arm intrinsics neon
我最近一直在研究内在函数的霓虹灯优化,我遇到了poly8_t和poly16_t数据类型.然后我想知道他们到底是什么.
我在网上搜索过,但到目前为止还没有找到任何解释它们是什么.
任何人都可以向我解释一下吗?
编辑:感谢您的回答,但为什么,如果它只是一种不同的乘法方式等,它是否有完全不同的数据类型?
左=常规乘法,右=无进行乘法
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
Run Code Online (Sandbox Code Playgroud)
对角线下降矩阵中的每个1或0表示来自矢量"1101"的一个源位和来自另一个矢量"1001"的一个源位的部分乘积.
正确的应用是CRC,(ECC)纠错码计算(Reed Solomon,BCH)和密码术(椭圆曲线,AES的内部).
说明与多项式乘法的连接,上面的操作可以概括为
1101 == x^3 + x^2 + 0 + 1;
1001 == x^3 + 0 + 0 + 1;
Run Code Online (Sandbox Code Playgroud)
正则多项式乘法是: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"
Run Code Online (Sandbox Code Playgroud)
在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计算,或者在有限域(数理论变换)中使用傅里叶变换实现bignum乘法.
这些类型用于无进位乘法.它对加密算法和CRC哈希和很有用.以下是一些关于应用程序的白皮书(他们探索x86 PCLMULQDQ指令,但同样的想法适用于ARM处理器上的无进位乘法):
| 归档时间: |
|
| 查看次数: |
2617 次 |
| 最近记录: |