On Wed, 30 Nov 2022 07:38:14 GMT, Xue-Lei Andrew Fan <xue...@openjdk.org> wrote:
>> Hi, >> >> Please review this performance improvement for Secp256R1 implementation in >> OpenJDK. With this update, there is an about 20% performance improvement >> for Secp256R1 key generation and signature. >> >> Basically, 256 bits EC curves could use 9 integer limbs for the computation. >> The current implementation use 10 limbs instead. By reducing the number of >> limbs, the implementation could benefit from less integer computation >> (add/sub/multiply/square/inverse/mod/pow, etc), and thus improve the >> performance. >> >> Here are the benchmark numbers without the patch: >> >> Benchmark (messageLength) Mode Cnt Score Error Units >> Signatures.sign 64 thrpt 15 1.414 ± 0.022 ops/ms >> Signatures.sign 512 thrpt 15 1.418 ± 0.004 ops/ms >> Signatures.sign 2048 thrpt 15 1.419 ± 0.005 ops/ms >> Signatures.sign 16384 thrpt 15 1.395 ± 0.003 ops/ms >> >> KeyGenerators.keyPairGen thrpt 15 1.475 ± 0.043 ops/ms >> >> >> And here are the numbers with the patch applied: >> >> Benchmark (messageLength) Mode Cnt Score Error Units >> ECSignature.sign 64 thrpt 15 1.719 ± 0.010 ops/ms >> ECSignature.sign 512 thrpt 15 1.704 ± 0.012 ops/ms >> ECSignature.sign 2048 thrpt 15 1.699 ± 0.018 ops/ms >> ECSignature.sign 16384 thrpt 15 1.681 ± 0.006 ops/ms >> >> KeyGenerators.keyPairGen thrpt 15 1.881 ± 0.008 ops/ms >> >> >> Thanks, >> Xuelei > > Xue-Lei Andrew Fan has updated the pull request incrementally with one > additional commit since the last revision: > > set maxadds Please add a test that verifies that the worst case calculation still produces correct results. That is: - build a number where the limb values are as high as possible (2^(numLimbs*bitsPerLimb)-1, or something close) - sum that number with itself until numAdds = maxAdds - square the result - compare the result with the same calculations on BigInteger ------------- PR: https://git.openjdk.org/jdk/pull/10398