c++ - Arm NEON and poly8_t and poly16_t -


i've been looking neon optimisation intrinsics , have come across poly8_t , poly16_t data types. i'm left wondering on earth are.

i've searched across net far have been unable find explanation of are.

can explain them me?

edit: answers why, if different way of multiplying etc, have totally different data type?

left = regular multiplication, right = carryless multiplication

        1 1 0 1                              1 1 0 1      *  1 0 0 1                              1 0 0 1    ------------        -->              --------------      (1)1 1 0 1  <-- (1) 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 

each 1 or 0 in diagonally descending matrix represents partial product of 1 source bit vector '1101' , 1 source bit other vector '1001'.

the applications of right 1 in crc, (ecc) error correction code calculations (reed solomon, bch) , cryptography (elliptic curves, internals of aes).

illustrating connection polynomial multiplication, operation above can summarized

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

regular polynomial multiplication being: 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" 

in gf(2) each coefficient calculated modulo 2, making 1100101b.

the datatype in gf looks uint8_t, uint16_t or perhaps upto 128_t in respect datatype gf(2^8) holds 256 unique bitpatterns. e.g. bitpattern '00010001' e.g. has no traditional interpretation. (it's not 17 decimal, perhaps 123th power of "unity" modulo other polynomial.) multiplying number same "unity" modulo generator polynomial g(x) leads 124th power , on. properties (identities) of finite fields have interesting applications -- such 1 can (remotely) calculate 32-bit number append file make it's 32-bit crc match; or 1 can use properties parallelize crc calculation, or implement bignum multiplication fourier-like transform in finite fields (number theoretic transform).


Comments

Popular posts from this blog

c# - How to get the current UAC mode -

postgresql - Lazarus + Postgres: incomplete startup packet -

javascript - Ajax jqXHR.status==0 fix error -