forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
6558a26 Make the benchmarks print out stats (Pieter Wuille) 000bdf6 Rename bench_verify to bench_recovery (Pieter Wuille)
- Loading branch information
Showing
6 changed files
with
175 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/********************************************************************** | ||
* Copyright (c) 2014 Pieter Wuille * | ||
* Distributed under the MIT software license, see the accompanying * | ||
* file COPYING or http://www.opensource.org/licenses/mit-license.php.* | ||
**********************************************************************/ | ||
|
||
#ifndef _SECP256K1_BENCH_H_ | ||
#define _SECP256K1_BENCH_H_ | ||
|
||
#include <stdio.h> | ||
#include <math.h> | ||
#include "sys/time.h" | ||
|
||
static double gettimedouble(void) { | ||
struct timeval tv; | ||
gettimeofday(&tv, NULL); | ||
return tv.tv_usec * 0.000001 + tv.tv_sec; | ||
} | ||
|
||
void run_benchmark(void (*benchmark)(void*), void (*setup)(void*), void (*teardown)(void*), void* data, int count, int iter) { | ||
double min = HUGE_VAL; | ||
double sum = 0.0; | ||
double max = 0.0; | ||
for (int i = 0; i < count; i++) { | ||
if (setup) setup(data); | ||
double begin = gettimedouble(); | ||
benchmark(data); | ||
double total = gettimedouble() - begin; | ||
if (teardown) teardown(data); | ||
if (total < min) min = total; | ||
if (total > max) max = total; | ||
sum += total; | ||
} | ||
printf("min %.3fus / avg %.3fus / max %.3fus\n", min * 1000000.0 / iter, (sum / count) * 1000000.0 / iter, max * 1000000.0 / iter); | ||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
/********************************************************************** | ||
* Copyright (c) 2014 Pieter Wuille * | ||
* Distributed under the MIT software license, see the accompanying * | ||
* file COPYING or http://www.opensource.org/licenses/mit-license.php.* | ||
**********************************************************************/ | ||
|
||
#include "include/secp256k1.h" | ||
#include "util.h" | ||
#include "bench.h" | ||
|
||
typedef struct { | ||
unsigned char msg[32]; | ||
unsigned char sig[64]; | ||
} bench_recover_t; | ||
|
||
void bench_recover(void* arg) { | ||
bench_recover_t *data = (bench_recover_t*)arg; | ||
|
||
unsigned char pubkey[33]; | ||
for (int i=0; i<20000; i++) { | ||
int pubkeylen = 33; | ||
CHECK(secp256k1_ecdsa_recover_compact(data->msg, 32, data->sig, pubkey, &pubkeylen, 1, i % 2)); | ||
for (int j = 0; j < 32; j++) { | ||
data->sig[j + 32] = data->msg[j]; /* Move former message to S. */ | ||
data->msg[j] = data->sig[j]; /* Move former R to message. */ | ||
data->sig[j] = pubkey[j + 1]; /* Move recovered pubkey X coordinate to R (which must be a valid X coordinate). */ | ||
} | ||
} | ||
} | ||
|
||
void bench_recover_setup(void* arg) { | ||
bench_recover_t *data = (bench_recover_t*)arg; | ||
|
||
for (int i = 0; i < 32; i++) data->msg[i] = 1 + i; | ||
for (int i = 0; i < 64; i++) data->sig[i] = 65 + i; | ||
} | ||
|
||
int main(void) { | ||
secp256k1_start(SECP256K1_START_VERIFY); | ||
|
||
bench_recover_t data; | ||
run_benchmark(bench_recover, bench_recover_setup, NULL, &data, 10, 20000); | ||
|
||
secp256k1_stop(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters