Skip to content

Commit a58f543

Browse files
committed
Add flags for choosing algorithm in ecmult_multi benchmark
1 parent 36b22c9 commit a58f543

File tree

3 files changed

+33
-17
lines changed

3 files changed

+33
-17
lines changed

src/bench.h

+16
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#define SECP256K1_BENCH_H
99

1010
#include <stdio.h>
11+
#include <string.h>
1112
#include <math.h>
1213
#include "sys/time.h"
1314

@@ -63,4 +64,19 @@ void run_benchmark(char *name, void (*benchmark)(void*), void (*setup)(void*), v
6364
printf("us\n");
6465
}
6566

67+
int have_flag(int argc, char** argv, char *flag) {
68+
char** argm = argv + argc;
69+
argv++;
70+
if (argv == argm) {
71+
return 1;
72+
}
73+
while (argv != NULL && argv != argm) {
74+
if (strcmp(*argv, flag) == 0) {
75+
return 1;
76+
}
77+
argv++;
78+
}
79+
return 0;
80+
}
81+
6682
#endif /* SECP256K1_BENCH_H */

src/bench_ecmult.c

+17-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ typedef struct {
2828
secp256k1_ge* pubkeys;
2929
secp256k1_scalar* seckeys;
3030
secp256k1_gej* expected_output;
31+
secp256k1_ecmult_multi_func ecmult_multi;
3132

3233
/* Changes per test */
3334
size_t count;
@@ -63,7 +64,7 @@ static void bench_ecmult(void* arg) {
6364
size_t iter;
6465

6566
for (iter = 0; iter < iters; ++iter) {
66-
secp256k1_ecmult_multi_var(&data->ctx->ecmult_ctx, data->scratch, &data->output[iter], data->includes_g ? &data->scalars[data->offset1] : NULL, bench_callback, arg, count - includes_g);
67+
data->ecmult_multi(&data->ctx->ecmult_ctx, data->scratch, &data->output[iter], data->includes_g ? &data->scalars[data->offset1] : NULL, bench_callback, arg, count - includes_g);
6768
data->offset1 = (data->offset1 + count) % POINTS;
6869
data->offset2 = (data->offset2 + count - 1) % POINTS;
6970
}
@@ -136,10 +137,24 @@ int main(int argc, char **argv) {
136137
bench_data data;
137138
int i, p;
138139
secp256k1_gej* pubkeys_gej;
140+
size_t scratch_size;
141+
142+
if (argc > 1) {
143+
if(have_flag(argc, argv, "pippenger_wnaf")) {
144+
printf("Using pippenger_wnaf:\n");
145+
data.ecmult_multi = secp256k1_ecmult_pippenger_batch_single;
146+
} else if(have_flag(argc, argv, "strauss_wnaf")) {
147+
printf("Using strauss_wnaf:\n");
148+
data.ecmult_multi = secp256k1_ecmult_strauss_batch_single;
149+
}
150+
} else {
151+
data.ecmult_multi = secp256k1_ecmult_multi_var;
152+
}
139153

140154
/* Allocate stuff */
141155
data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY);
142-
data.scratch = secp256k1_scratch_space_create(data.ctx, POINTS * 1024, POINTS * 5 * 1024);
156+
scratch_size = secp256k1_strauss_scratch_size(POINTS) + STRAUSS_SCRATCH_OBJECTS*16;
157+
data.scratch = secp256k1_scratch_space_create(data.ctx, scratch_size, scratch_size);
143158
data.scalars = malloc(sizeof(secp256k1_scalar) * POINTS);
144159
data.seckeys = malloc(sizeof(secp256k1_scalar) * POINTS);
145160
data.pubkeys = malloc(sizeof(secp256k1_ge) * POINTS);

src/bench_internal.c

-15
Original file line numberDiff line numberDiff line change
@@ -324,21 +324,6 @@ void bench_num_jacobi(void* arg) {
324324
}
325325
#endif
326326

327-
int have_flag(int argc, char** argv, char *flag) {
328-
char** argm = argv + argc;
329-
argv++;
330-
if (argv == argm) {
331-
return 1;
332-
}
333-
while (argv != NULL && argv != argm) {
334-
if (strcmp(*argv, flag) == 0) {
335-
return 1;
336-
}
337-
argv++;
338-
}
339-
return 0;
340-
}
341-
342327
int main(int argc, char **argv) {
343328
bench_inv data;
344329
if (have_flag(argc, argv, "scalar") || have_flag(argc, argv, "add")) run_benchmark("scalar_add", bench_scalar_add, bench_setup, NULL, &data, 10, 2000000);

0 commit comments

Comments
 (0)