Evaluate individual products at products.len() +1 points instead of always max_degree + 1 points, and extrapolate it to max_degree + 1 points later.
Preprocess more on mlkzg multi_open to combine the polys opening at the same point, to reduce the workload of updating the table.
Comparison
Running cargo bench --bench hyperplonk-benches --features print-trace and extract the following trace components of bench_vanilla_plonk when num_vars = 20, the result is as follows:
Name
Trace Components
Before
After
Ratio (Before/After)
Gate ZeroCheck
ZeroCheck on f
345.313ms
268.233ms
1.287
Permutation ZeroCheck
zerocheck in product check
424.487ms
345.190ms
1.229
PCS SumCheck
compute tilde g for 22 points compute tilde eq for 22 points sum check prove of 20 variables
This PR does 2 changes:
products.len() +1
points instead of alwaysmax_degree + 1
points, and extrapolate it tomax_degree + 1
points later.multi_open
to combine the polys opening at the same point, to reduce the workload of updating the table.Comparison
Running
cargo bench --bench hyperplonk-benches --features print-trace
and extract the following trace components ofbench_vanilla_plonk
whennum_vars = 20
, the result is as follows:compute tilde eq for 22 points
sum check prove of 20 variables
100.478ms
991.671ms
69.953ms
235.245ms