gtank / ristretto255

Implements ristretto255, a fast prime-order group.
https://ristretto.group
BSD 3-Clause "New" or "Revised" License
98 stars 22 forks source link

radix51: use go1.12 intrinsics for 128-bit multiplications #13

Closed gtank closed 5 years ago

gtank commented 5 years ago

Benchmark from Crostini on a low-end Pixelbook (Intel(R) Core(TM) i5-7Y57 CPU @ 1.20GHz). They're noisy (and there's likely some conflation with other go1.12 changes) but the general picture looks pretty good.

$ benchstat go1.11.5.noasm.bench go1.12rc1.noasm.bench
name          old time/op  new time/op  delta
IsOnCurve-4    583ns ± 5%   402ns ± 6%  -31.03%  (p=0.000 n=10+9)
Add-4         16.7µs ± 7%   7.0µs ± 9%  -58.14%  (p=0.000 n=10+10)
Double-4      16.4µs ± 2%   6.8µs ± 2%  -58.37%  (p=0.000 n=8+8)
ScalarMult-4   394µs ± 6%   174µs ± 4%  -55.91%  (p=0.000 n=9+8)
FeMul51-4     83.0ns ± 3%  31.3ns ± 3%  -62.33%  (p=0.000 n=9+8)
FeSquare51-4  52.4ns ± 2%  20.5ns ± 2%  -60.85%  (p=0.000 n=8+8)
FeFromBig-4   74.6ns ± 1%  74.0ns ± 3%     ~     (p=0.060 n=8+8)
FeToBig-4      197ns ± 4%   182ns ± 5%   -7.55%  (p=0.000 n=9+9)