1818#include "secp256k1.c"
1919
2020#define POINTS 32768
21- #define ITERS 10000
2221
2322typedef struct {
2423 /* Setup once in advance */
@@ -55,13 +54,13 @@ static int bench_callback(secp256k1_scalar* sc, secp256k1_ge* ge, size_t idx, vo
5554 return 1 ;
5655}
5756
58- static void bench_ecmult (void * arg ) {
57+ static void bench_ecmult (void * arg , int iters ) {
5958 bench_data * data = (bench_data * )arg ;
6059
61- size_t count = data -> count ;
6260 int includes_g = data -> includes_g ;
63- size_t iters = 1 + ITERS / count ;
64- size_t iter ;
61+ int iter ;
62+ int count = data -> count ;
63+ iters = iters / data -> count ;
6564
6665 for (iter = 0 ; iter < iters ; ++ iter ) {
6766 data -> ecmult_multi (& data -> ctx -> error_callback , & data -> ctx -> ecmult_ctx , data -> scratch , & data -> output [iter ], data -> includes_g ? & data -> scalars [data -> offset1 ] : NULL , bench_callback , arg , count - includes_g );
@@ -76,10 +75,10 @@ static void bench_ecmult_setup(void* arg) {
7675 data -> offset2 = (data -> count * 0x7f6f537b + 0x6a1a8f49 ) % POINTS ;
7776}
7877
79- static void bench_ecmult_teardown (void * arg ) {
78+ static void bench_ecmult_teardown (void * arg , int iters ) {
8079 bench_data * data = (bench_data * )arg ;
81- size_t iters = 1 + ITERS / data -> count ;
82- size_t iter ;
80+ int iter ;
81+ iters = iters / data -> count ;
8382 /* Verify the results in teardown, to avoid doing comparisons while benchmarking. */
8483 for (iter = 0 ; iter < iters ; ++ iter ) {
8584 secp256k1_gej tmp ;
@@ -104,10 +103,10 @@ static void generate_scalar(uint32_t num, secp256k1_scalar* scalar) {
104103 CHECK (!overflow );
105104}
106105
107- static void run_test (bench_data * data , size_t count , int includes_g ) {
106+ static void run_test (bench_data * data , size_t count , int includes_g , int num_iters ) {
108107 char str [32 ];
109108 static const secp256k1_scalar zero = SECP256K1_SCALAR_CONST (0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
110- size_t iters = 1 + ITERS / count ;
109+ size_t iters = 1 + num_iters / count ;
111110 size_t iter ;
112111
113112 data -> count = count ;
@@ -130,7 +129,7 @@ static void run_test(bench_data* data, size_t count, int includes_g) {
130129
131130 /* Run the benchmark. */
132131 sprintf (str , includes_g ? "ecmult_%ig" : "ecmult_%i" , (int )count );
133- run_benchmark (str , bench_ecmult , bench_ecmult_setup , bench_ecmult_teardown , data , 10 , count * ( 1 + ITERS / count ) );
132+ run_benchmark (str , bench_ecmult , bench_ecmult_setup , bench_ecmult_teardown , data , 10 , count * iters );
134133}
135134
136135int main (int argc , char * * argv ) {
@@ -139,6 +138,8 @@ int main(int argc, char **argv) {
139138 secp256k1_gej * pubkeys_gej ;
140139 size_t scratch_size ;
141140
141+ int iters = get_iters (10000 );
142+
142143 data .ctx = secp256k1_context_create (SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY );
143144 scratch_size = secp256k1_strauss_scratch_size (POINTS ) + STRAUSS_SCRATCH_OBJECTS * 16 ;
144145 data .scratch = secp256k1_scratch_space_create (data .ctx , scratch_size );
@@ -167,8 +168,8 @@ int main(int argc, char **argv) {
167168 data .scalars = malloc (sizeof (secp256k1_scalar ) * POINTS );
168169 data .seckeys = malloc (sizeof (secp256k1_scalar ) * POINTS );
169170 data .pubkeys = malloc (sizeof (secp256k1_ge ) * POINTS );
170- data .expected_output = malloc (sizeof (secp256k1_gej ) * (ITERS + 1 ));
171- data .output = malloc (sizeof (secp256k1_gej ) * (ITERS + 1 ));
171+ data .expected_output = malloc (sizeof (secp256k1_gej ) * (iters + 1 ));
172+ data .output = malloc (sizeof (secp256k1_gej ) * (iters + 1 ));
172173
173174 /* Generate a set of scalars, and private/public keypairs. */
174175 pubkeys_gej = malloc (sizeof (secp256k1_gej ) * POINTS );
@@ -185,14 +186,20 @@ int main(int argc, char **argv) {
185186 free (pubkeys_gej );
186187
187188 for (i = 1 ; i <= 8 ; ++ i ) {
188- run_test (& data , i , 1 );
189+ run_test (& data , i , 1 , iters );
189190 }
190191
191- for (p = 0 ; p <= 11 ; ++ p ) {
192- for (i = 9 ; i <= 16 ; ++ i ) {
193- run_test (& data , i << p , 1 );
192+ /* This is disabled with low count of iterations because the loop runs 77 times even with iters=1
193+ * and the higher it goes the longer the computation takes(more points)
194+ * So we don't run this benchmark with low iterations to prevent slow down */
195+ if (iters > 2 ) {
196+ for (p = 0 ; p <= 11 ; ++ p ) {
197+ for (i = 9 ; i <= 16 ; ++ i ) {
198+ run_test (& data , i << p , 1 , iters );
199+ }
194200 }
195201 }
202+
196203 if (data .scratch != NULL ) {
197204 secp256k1_scratch_space_destroy (data .ctx , data .scratch );
198205 }
0 commit comments