pull request 10 in libff introduces a new interface for multiexponentiation and a faster multiexponentiation algorithm, djb.
This pull request first just adapts the libsnark code to use this new interface, fixing a couple include-related bugs in the process, and then, in commit 613763680eb67f2d01344368c75048eaa7d5d8e3, switches the multiexponentiation method to the djb in the cases where we've found it to be beneficial.
Specifically, we have observed the following improvements:
the prover in ./libsnark/profile_ram_ppzksnark 32 16 100 10 300 (a sample TinyRAM ppzkSNARK, which is reduced to a R1CS with 999788 constraints and 745726 variables) runs 25% faster
the prover in ./libsnark/profile_uscs_ppzksnark 1000000 20 (1000000 constraints, 20 variables) runs 53% faster
the prover in ./libsnark/profile_r1cs_gg_ppzksnark 1000000 700000 (1000000 constraints, 700000 variables) runs 33% faster
(all with MULTICORE=off, USE_MIXED_ADDITION=on, on my personal machine with a Intel(R) Core(TM) i3-6100U CPU @ 2.30GHz CPU)
pull request 10 in libff introduces a new interface for multiexponentiation and a faster multiexponentiation algorithm, djb.
This pull request first just adapts the libsnark code to use this new interface, fixing a couple include-related bugs in the process, and then, in commit 613763680eb67f2d01344368c75048eaa7d5d8e3, switches the multiexponentiation method to the djb in the cases where we've found it to be beneficial.
Specifically, we have observed the following improvements:
the prover in
./libsnark/profile_ram_ppzksnark 32 16 100 10 300
(a sample TinyRAM ppzkSNARK, which is reduced to a R1CS with 999788 constraints and 745726 variables) runs 25% fasterthe prover in
./libsnark/profile_uscs_ppzksnark 1000000 20
(1000000 constraints, 20 variables) runs 53% fasterthe prover in
./libsnark/profile_r1cs_gg_ppzksnark 1000000 700000
(1000000 constraints, 700000 variables) runs 33% faster(all with
MULTICORE=off
,USE_MIXED_ADDITION=on
, on my personal machine with aIntel(R) Core(TM) i3-6100U CPU @ 2.30GHz
CPU)