crypto: poly1305 - Add a four block AVX2 variant for x86_64
Extends the x86_64 Poly1305 authenticator by a function processing four
consecutive Poly1305 blocks in parallel using AVX2 instructions.
For large messages, throughput increases by ~15-45% compared to two
block SSE2:
testing speed of poly1305 (poly1305-simd)
test 0 ( 96 byte blocks, 16 bytes per update, 6 updates):
3809514 opers/sec,
365713411 bytes/sec
test 1 ( 96 byte blocks, 32 bytes per update, 3 updates):
5973423 opers/sec,
573448627 bytes/sec
test 2 ( 96 byte blocks, 96 bytes per update, 1 updates):
9446779 opers/sec,
906890803 bytes/sec
test 3 ( 288 byte blocks, 16 bytes per update, 18 updates):
1364814 opers/sec,
393066691 bytes/sec
test 4 ( 288 byte blocks, 32 bytes per update, 9 updates):
2045780 opers/sec,
589184697 bytes/sec
test 5 ( 288 byte blocks, 288 bytes per update, 1 updates):
3711946 opers/sec,
1069040592 bytes/sec
test 6 ( 1056 byte blocks, 32 bytes per update, 33 updates): 573686 opers/sec,
605812732 bytes/sec
test 7 ( 1056 byte blocks, 1056 bytes per update, 1 updates):
1647802 opers/sec,
1740079440 bytes/sec
test 8 ( 2080 byte blocks, 32 bytes per update, 65 updates): 292970 opers/sec,
609378224 bytes/sec
test 9 ( 2080 byte blocks, 2080 bytes per update, 1 updates): 943229 opers/sec,
1961916528 bytes/sec
test 10 ( 4128 byte blocks, 4128 bytes per update, 1 updates): 494623 opers/sec,
2041804569 bytes/sec
test 11 ( 8224 byte blocks, 8224 bytes per update, 1 updates): 254045 opers/sec,
2089271014 bytes/sec
testing speed of poly1305 (poly1305-simd)
test 0 ( 96 byte blocks, 16 bytes per update, 6 updates):
3826224 opers/sec,
367317552 bytes/sec
test 1 ( 96 byte blocks, 32 bytes per update, 3 updates):
5948638 opers/sec,
571069267 bytes/sec
test 2 ( 96 byte blocks, 96 bytes per update, 1 updates):
9439110 opers/sec,
906154627 bytes/sec
test 3 ( 288 byte blocks, 16 bytes per update, 18 updates):
1367756 opers/sec,
393913872 bytes/sec
test 4 ( 288 byte blocks, 32 bytes per update, 9 updates):
2056881 opers/sec,
592381958 bytes/sec
test 5 ( 288 byte blocks, 288 bytes per update, 1 updates):
3711153 opers/sec,
1068812179 bytes/sec
test 6 ( 1056 byte blocks, 32 bytes per update, 33 updates): 574940 opers/sec,
607136745 bytes/sec
test 7 ( 1056 byte blocks, 1056 bytes per update, 1 updates):
1948830 opers/sec,
2057964585 bytes/sec
test 8 ( 2080 byte blocks, 32 bytes per update, 65 updates): 293308 opers/sec,
610082096 bytes/sec
test 9 ( 2080 byte blocks, 2080 bytes per update, 1 updates):
1235224 opers/sec,
2569267792 bytes/sec
test 10 ( 4128 byte blocks, 4128 bytes per update, 1 updates): 684405 opers/sec,
2825226316 bytes/sec
test 11 ( 8224 byte blocks, 8224 bytes per update, 1 updates): 367101 opers/sec,
3019039446 bytes/sec
Benchmark results from a Core i5-4670T.
Signed-off-by: Martin Willi <martin@strongswan.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>