Changeset View
Changeset View
Standalone View
Standalone View
src/secp256k1/src/bench_ecmult.c
Show First 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | static void bench_ecmult(void* arg) { | ||||
bench_data* data = (bench_data*)arg; | bench_data* data = (bench_data*)arg; | ||||
size_t count = data->count; | size_t count = data->count; | ||||
int includes_g = data->includes_g; | int includes_g = data->includes_g; | ||||
size_t iters = 1 + ITERS / count; | size_t iters = 1 + ITERS / count; | ||||
size_t iter; | size_t iter; | ||||
for (iter = 0; iter < iters; ++iter) { | for (iter = 0; iter < iters; ++iter) { | ||||
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); | 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); | ||||
data->offset1 = (data->offset1 + count) % POINTS; | data->offset1 = (data->offset1 + count) % POINTS; | ||||
data->offset2 = (data->offset2 + count - 1) % POINTS; | data->offset2 = (data->offset2 + count - 1) % POINTS; | ||||
} | } | ||||
} | } | ||||
static void bench_ecmult_setup(void* arg) { | static void bench_ecmult_setup(void* arg) { | ||||
bench_data* data = (bench_data*)arg; | bench_data* data = (bench_data*)arg; | ||||
data->offset1 = (data->count * 0x537b7f6f + 0x8f66a481) % POINTS; | data->offset1 = (data->count * 0x537b7f6f + 0x8f66a481) % POINTS; | ||||
▲ Show 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | if (argc > 1) { | ||||
printf("Using pippenger_wnaf:\n"); | printf("Using pippenger_wnaf:\n"); | ||||
data.ecmult_multi = secp256k1_ecmult_pippenger_batch_single; | data.ecmult_multi = secp256k1_ecmult_pippenger_batch_single; | ||||
} else if(have_flag(argc, argv, "strauss_wnaf")) { | } else if(have_flag(argc, argv, "strauss_wnaf")) { | ||||
printf("Using strauss_wnaf:\n"); | printf("Using strauss_wnaf:\n"); | ||||
data.ecmult_multi = secp256k1_ecmult_strauss_batch_single; | data.ecmult_multi = secp256k1_ecmult_strauss_batch_single; | ||||
} else if(have_flag(argc, argv, "simple")) { | } else if(have_flag(argc, argv, "simple")) { | ||||
printf("Using simple algorithm:\n"); | printf("Using simple algorithm:\n"); | ||||
data.ecmult_multi = secp256k1_ecmult_multi_var; | data.ecmult_multi = secp256k1_ecmult_multi_var; | ||||
secp256k1_scratch_space_destroy(data.scratch); | secp256k1_scratch_space_destroy(data.ctx, data.scratch); | ||||
data.scratch = NULL; | data.scratch = NULL; | ||||
} else { | } else { | ||||
fprintf(stderr, "%s: unrecognized argument '%s'.\n", argv[0], argv[1]); | fprintf(stderr, "%s: unrecognized argument '%s'.\n", argv[0], argv[1]); | ||||
fprintf(stderr, "Use 'pippenger_wnaf', 'strauss_wnaf', 'simple' or no argument to benchmark a combined algorithm.\n"); | fprintf(stderr, "Use 'pippenger_wnaf', 'strauss_wnaf', 'simple' or no argument to benchmark a combined algorithm.\n"); | ||||
return 1; | return 1; | ||||
} | } | ||||
} | } | ||||
Show All 22 Lines | for (i = 1; i <= 8; ++i) { | ||||
run_test(&data, i, 1); | run_test(&data, i, 1); | ||||
} | } | ||||
for (p = 0; p <= 11; ++p) { | for (p = 0; p <= 11; ++p) { | ||||
for (i = 9; i <= 16; ++i) { | for (i = 9; i <= 16; ++i) { | ||||
run_test(&data, i << p, 1); | run_test(&data, i << p, 1); | ||||
} | } | ||||
} | } | ||||
secp256k1_context_destroy(data.ctx); | |||||
if (data.scratch != NULL) { | if (data.scratch != NULL) { | ||||
secp256k1_scratch_space_destroy(data.scratch); | secp256k1_scratch_space_destroy(data.ctx, data.scratch); | ||||
} | } | ||||
secp256k1_context_destroy(data.ctx); | |||||
free(data.scalars); | free(data.scalars); | ||||
free(data.pubkeys); | free(data.pubkeys); | ||||
free(data.seckeys); | free(data.seckeys); | ||||
free(data.output); | free(data.output); | ||||
free(data.expected_output); | free(data.expected_output); | ||||
return(0); | return(0); | ||||
} | } |