Arm NEON和poly8_t和poly16_t

时间:2014-03-06 12:18:00

标签: c++ c arm neon intrinsics

我最近一直在研究内在函数的霓虹灯优化,我遇到了poly8_t和poly16_t数据类型。然后我想知道他们究竟是什么。

我在网上搜索过,但到目前为止还无法找到任何解释。

有人可以向我解释一下吗?

编辑 :感谢您的回答,但为什么,如果它只是一种不同的乘法方式等,它是否有完全不同的数据类型?

4 个答案:

答案 0 :(得分:9)

左=常规乘法,右=无进行乘法

        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计算,或者在有限域(数理论变换)中使用类似傅立叶的变换实现bignum乘法。

答案 1 :(得分:6)

这些类型用于无进位乘法。它对加密算法和CRC哈希和很有用。以下是一些关于应用程序的白皮书(他们探讨了x86 PCLMULQDQ指令,但同样的想法适用于ARM处理器上的无进位乘法):

答案 2 :(得分:2)

你没有描述PMUL vs PMULL。

据我了解(可能不正确)每个元素 PMUL在两个8位源元素上工作并生成一个 8位结果元素。

每个元素PMUL生成8个部分产品和 每个PP在XORed之前分别移动。所以来自 第一个PP的lsb到最后一个PP的msb。 似乎有15位的结果。 PMUL只能存储 一个8位的结果。

15位结果中最重要的7位被丢弃了吗?

答案 3 :(得分:1)

作为参考,这是来自Cortex-A Series Programmer’s Guide (v4)第7.2.2章:

  

多项式算法在实现某些加密时很有用   或数据完整性算法。

     

在{0,1}上添加两个多项式与按位异或相同   要么。多项式附加导致a的值不同   常规添加。

     

将两个多项式乘以{0,1}包括首先确定   部分产品如常规乘法,然后部分   产品是异或,而不是按常规添加。   多项式乘法导致与常规值不同的值   乘法,因为它需要部分的多项式加法   产品