1
1
//! Benchmarking the commit times for hyperkzg over BN254 field using
2
- //! halo2curves library and the Nova-provided MSM routine , on a range of scalar bit-widths
3
- use core:: { ops :: Mul , time:: Duration } ;
2
+ //! halo2curves library and the Nova-provided commitment engine , on a range of scalar bit-widths
3
+ use core:: time:: Duration ;
4
4
use criterion:: { black_box, criterion_group, criterion_main, Criterion } ;
5
- use halo2curves:: {
6
- bn256:: { Fr as Scalar , G1Affine } ,
7
- ff:: Field ,
8
- group:: Curve ,
9
- msm:: msm_best,
5
+ use halo2curves:: { bn256:: Fr as Scalar , ff:: Field , msm:: msm_best} ;
6
+ use nova_snark:: {
7
+ provider:: Bn256EngineKZG ,
8
+ traits:: { commitment:: CommitmentEngineTrait , Engine } ,
10
9
} ;
11
- use nova_snark:: provider:: msm:: { msm_generic, msm_integer} ;
12
10
use rand:: Rng ;
13
11
use rayon:: prelude:: * ;
14
12
@@ -21,20 +19,15 @@ targets = bench_commit
21
19
criterion_main ! ( commit) ;
22
20
23
21
fn bench_commit ( c : & mut Criterion ) {
22
+ type E = Bn256EngineKZG ;
23
+
24
24
let min = 1 << 20 ;
25
25
let max = 1 << 24 ;
26
26
27
27
// sample bases for the purpose of testing
28
- let bases: Vec < _ > = ( 0 ..max)
29
- . into_par_iter ( )
30
- . map ( |_| {
31
- let mut rng = rand:: thread_rng ( ) ;
32
- let scalar = Scalar :: random ( & mut rng) ;
33
- G1Affine :: generator ( ) . mul ( scalar) . to_affine ( )
34
- } )
35
- . collect ( ) ;
28
+ let ck = <E as Engine >:: CE :: setup ( b"test_from_label" , max) ;
36
29
37
- assert_eq ! ( bases . len ( ) , max ) ;
30
+ let zero = < E as Engine > :: Scalar :: zero ( ) ;
38
31
39
32
// random scalars that are in the set {0, 1}
40
33
let scalars_u1 = ( 0 ..max)
@@ -119,71 +112,137 @@ fn bench_commit(c: &mut Criterion) {
119
112
let mut size = min;
120
113
while size <= max {
121
114
c. bench_function ( & format ! ( "halo2curves_commit_u1_{size}" ) , |b| {
122
- b. iter ( || black_box ( msm_best ( & scalars_u1_field[ ..size] , & bases [ ..size] ) ) )
115
+ b. iter ( || black_box ( msm_best ( & scalars_u1_field[ ..size] , & ck . ck ( ) [ ..size] ) ) )
123
116
} ) ;
124
117
125
118
c. bench_function ( & format ! ( "nova_generic_commit_u1_{size}" ) , |b| {
126
- b. iter ( || black_box ( msm_generic ( & scalars_u1_field[ ..size] , & bases[ ..size] ) ) )
119
+ b. iter ( || {
120
+ black_box ( <E as Engine >:: CE :: commit (
121
+ & ck,
122
+ & scalars_u1_field[ ..size] ,
123
+ & zero,
124
+ ) )
125
+ } )
127
126
} ) ;
128
127
129
128
c. bench_function ( & format ! ( "nova_specialized_commit_u1_{size}" ) , |b| {
130
- b. iter ( || black_box ( msm_integer ( & scalars_u1[ ..size] , & bases[ ..size] ) ) )
129
+ b. iter ( || {
130
+ black_box ( <E as Engine >:: CE :: commit_small (
131
+ & ck,
132
+ & scalars_u1[ ..size] ,
133
+ & zero,
134
+ ) )
135
+ } )
131
136
} ) ;
132
137
133
138
c. bench_function ( & format ! ( "halo2curves_commit_u10_{size}" ) , |b| {
134
- b. iter ( || black_box ( msm_best ( & scalars_u10_field[ ..size] , & bases [ ..size] ) ) )
139
+ b. iter ( || black_box ( msm_best ( & scalars_u10_field[ ..size] , & ck . ck ( ) [ ..size] ) ) )
135
140
} ) ;
136
141
137
142
c. bench_function ( & format ! ( "nova_generic_commit_u10_{size}" ) , |b| {
138
- b. iter ( || black_box ( msm_generic ( & scalars_u10_field[ ..size] , & bases[ ..size] ) ) )
143
+ b. iter ( || {
144
+ black_box ( <E as Engine >:: CE :: commit (
145
+ & ck,
146
+ & scalars_u10_field[ ..size] ,
147
+ & zero,
148
+ ) )
149
+ } )
139
150
} ) ;
140
151
141
152
c. bench_function ( & format ! ( "nova_specialized_commit_u10_{size}" ) , |b| {
142
- b. iter ( || black_box ( msm_integer ( & scalars_u10[ ..size] , & bases[ ..size] ) ) )
153
+ b. iter ( || {
154
+ black_box ( <E as Engine >:: CE :: commit_small (
155
+ & ck,
156
+ & scalars_u10[ ..size] ,
157
+ & zero,
158
+ ) )
159
+ } )
143
160
} ) ;
144
161
145
162
c. bench_function ( & format ! ( "halo2curves_commit_u16_{size}" ) , |b| {
146
- b. iter ( || black_box ( msm_best ( & scalars_u16_field[ ..size] , & bases [ ..size] ) ) )
163
+ b. iter ( || black_box ( msm_best ( & scalars_u16_field[ ..size] , & ck . ck ( ) [ ..size] ) ) )
147
164
} ) ;
148
165
149
166
c. bench_function ( & format ! ( "nova_generic_commit_u16_{size}" ) , |b| {
150
- b. iter ( || black_box ( msm_generic ( & scalars_u16_field[ ..size] , & bases[ ..size] ) ) )
167
+ b. iter ( || {
168
+ black_box ( <E as Engine >:: CE :: commit (
169
+ & ck,
170
+ & scalars_u16_field[ ..size] ,
171
+ & zero,
172
+ ) )
173
+ } )
151
174
} ) ;
152
175
153
176
c. bench_function ( & format ! ( "nova_specialized_commit_u16_{size}" ) , |b| {
154
- b. iter ( || black_box ( msm_integer ( & scalars_u16[ ..size] , & bases[ ..size] ) ) )
177
+ b. iter ( || {
178
+ black_box ( <E as Engine >:: CE :: commit_small (
179
+ & ck,
180
+ & scalars_u16[ ..size] ,
181
+ & zero,
182
+ ) )
183
+ } )
155
184
} ) ;
156
185
157
186
c. bench_function ( & format ! ( "halo2curves_commit_u32_{size}" ) , |b| {
158
- b. iter ( || black_box ( msm_best ( & scalars_u32_field[ ..size] , & bases [ ..size] ) ) )
187
+ b. iter ( || black_box ( msm_best ( & scalars_u32_field[ ..size] , & ck . ck ( ) [ ..size] ) ) )
159
188
} ) ;
160
189
161
190
c. bench_function ( & format ! ( "nova_generic_commit_u32_{size}" ) , |b| {
162
- b. iter ( || black_box ( msm_generic ( & scalars_u32_field[ ..size] , & bases[ ..size] ) ) )
191
+ b. iter ( || {
192
+ black_box ( <E as Engine >:: CE :: commit (
193
+ & ck,
194
+ & scalars_u32_field[ ..size] ,
195
+ & zero,
196
+ ) )
197
+ } )
163
198
} ) ;
164
199
165
200
c. bench_function ( & format ! ( "nova_specialized_commit_u32_{size}" ) , |b| {
166
- b. iter ( || black_box ( msm_integer ( & scalars_u32[ ..size] , & bases[ ..size] ) ) )
201
+ b. iter ( || {
202
+ black_box ( <E as Engine >:: CE :: commit_small (
203
+ & ck,
204
+ & scalars_u32[ ..size] ,
205
+ & zero,
206
+ ) )
207
+ } )
167
208
} ) ;
168
209
169
210
c. bench_function ( & format ! ( "halo2curves_commit_u64_{size}" ) , |b| {
170
- b. iter ( || black_box ( msm_best ( & scalars_u64_field[ ..size] , & bases [ ..size] ) ) )
211
+ b. iter ( || black_box ( msm_best ( & scalars_u64_field[ ..size] , & ck . ck ( ) [ ..size] ) ) )
171
212
} ) ;
172
213
173
214
c. bench_function ( & format ! ( "nova_generic_commit_u64_{size}" ) , |b| {
174
- b. iter ( || black_box ( msm_generic ( & scalars_u64_field[ ..size] , & bases[ ..size] ) ) )
215
+ b. iter ( || {
216
+ black_box ( <E as Engine >:: CE :: commit (
217
+ & ck,
218
+ & scalars_u64_field[ ..size] ,
219
+ & zero,
220
+ ) )
221
+ } )
175
222
} ) ;
176
223
177
224
c. bench_function ( & format ! ( "nova_specialized_commit_u64_{size}" ) , |b| {
178
- b. iter ( || black_box ( msm_integer ( & scalars_u64[ ..size] , & bases[ ..size] ) ) )
225
+ b. iter ( || {
226
+ black_box ( <E as Engine >:: CE :: commit_small (
227
+ & ck,
228
+ & scalars_u64[ ..size] ,
229
+ & zero,
230
+ ) )
231
+ } )
179
232
} ) ;
180
233
181
234
c. bench_function ( & format ! ( "halo2curves_commit_random_{size}" ) , |b| {
182
- b. iter ( || black_box ( msm_best ( & scalars_random_field[ ..size] , & bases [ ..size] ) ) )
235
+ b. iter ( || black_box ( msm_best ( & scalars_random_field[ ..size] , & ck . ck ( ) [ ..size] ) ) )
183
236
} ) ;
184
237
185
238
c. bench_function ( & format ! ( "nova_generic_commit_random_{size}" ) , |b| {
186
- b. iter ( || black_box ( msm_best ( & scalars_random_field[ ..size] , & bases[ ..size] ) ) )
239
+ b. iter ( || {
240
+ black_box ( <E as Engine >:: CE :: commit (
241
+ & ck,
242
+ & scalars_random_field[ ..size] ,
243
+ & zero,
244
+ ) )
245
+ } )
187
246
} ) ;
188
247
189
248
size *= 4 ;
0 commit comments