sm3: 使用逻辑运算分配律优化FF2
emmansun opened this issue · comments
FF2(x, y, z) = (x ^ y) | (x ^ z) | (y ^ z) = x ^ (y | z) | (y ^ z)
AVX2:
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
404881 2663 ns/op 384.53 MB/s 0 B/op 0 allocs/op
AVX:
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
412590 2793 ns/op 366.59 MB/s 0 B/op 0 allocs/op
普通汇编:
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
314943 3955 ns/op 258.88 MB/s 0 B/op 0 allocs/op
纯golang:
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
233209 4699 ns/op 217.91 MB/s 0 B/op 0 allocs/op
AVX2(SH256):
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sm3
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K_SH256
BenchmarkHash1K_SH256-6
508598 2281 ns/op 448.94 MB/s 0 B/op 0 allocs/op
经过和sha256的代码详细比对,SM3压缩部分并不比SHA256复杂,SHA256普通汇编的性能也只有:
goos: windows
goarch: amd64
pkg: github.com/emmansun/gmsm/sha256
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
BenchmarkHash1K
BenchmarkHash1K-6
260756 4525 ns/op 226.30 MB/s 0 B/op 0 allocs/op