1
0
Fork 0
mirror of https://github.com/eosswedenorg/antelope-keygen synced 2026-06-17 03:50:03 +02:00

Merge pull request #12 from eosswedenorg/benchmark

Closes #11
This commit is contained in:
Henrik Hautakoski 2020-01-29 10:53:05 +01:00 committed by GitHub
commit e310bb7ac0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 121 additions and 1 deletions

View file

@ -24,6 +24,7 @@ set (PROGRAM_SOURCE
src/WIF.cpp
src/key_search.cpp
src/key_search_helpers.cpp
src/benchmark.cpp
src/main.cpp
)

50
src/benchmark.cpp Normal file
View file

@ -0,0 +1,50 @@
/**
* MIT License
*
* Copyright (c) 2019-2020 EOS Sw/eden
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include <chrono>
#include "ec.h"
#include "benchmark.h"
using std::chrono::steady_clock;
using std::chrono::duration;
using std::chrono::time_point;
void benchmark(size_t num_keys, struct benchmark_result* res) {
time_point<steady_clock> start;
if (num_keys < 1) {
res->sec = res->kps = 0;
return;
}
start = steady_clock::now();
for(size_t i = 0; i < num_keys; i++) {
struct ec_keypair k;
ec_generate_key(&k);
}
res->sec = duration<float>(steady_clock::now() - start).count();
res->kps = num_keys / res->sec;
}

36
src/benchmark.h Normal file
View file

@ -0,0 +1,36 @@
/**
* MIT License
*
* Copyright (c) 2019-2020 EOS Sw/eden
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef BENCHMARK_H
#define BENCHMARK_H
#include <ctime>
struct benchmark_result {
float sec; // elapsed seconds.
float kps; // keys per second.
};
void benchmark(size_t num_keys, struct benchmark_result* res);
#endif /* BENCHMARK_H */

View file

@ -30,6 +30,7 @@
#include "WIF.h"
#include "ec.h"
#include "key_search.h"
#include "benchmark.h"
// Command line options.
bool option_l33t = false;
@ -81,7 +82,9 @@ void usage(const char *name) {
#ifdef HAVE_THREADS
<< " | --threads=<num>"
#endif /* HAVE_THREADS */
<< " ] <word_list> [ <count:10> ] ]"
<< " ] <word_list> [ <count:10> ]"
<< " | benchmark [ <num:1000> ]"
<< " ]"
<< std::endl << std::endl;
std::cout << " - Output one EOSIO key pair if no arguments are given" << std::endl << std::endl;
@ -105,6 +108,23 @@ void usage(const char *name) {
<< " Default is what the operating system recomend."
#endif /* HAVE_THREADS */
<< std::endl;
std::cout << " Benchmark: " << std::endl
<< " performs a benchmark test, generating <num> keys and measuring the time." << std::endl
<< std::endl;
}
void cmd_benchmark(size_t num_keys) {
struct benchmark_result res;
std::cout << "Benchmark: Generating "
<< num_keys << " keys" << std::endl;
benchmark(num_keys, &res);
std::cout << "Result: Took " << res.sec << " seconds, "
<< res.kps << " keys per second." << std::endl;
}
int main(int argc, char **argv) {
@ -164,6 +184,19 @@ int main(int argc, char **argv) {
// Pass the rest of argv, argc
cmd_search(argc - p, &argv[p]);
}
// Benchmark
else if (!strcmp(argv[p], "benchmark")) {
int num_keys = 1000;
if (++p < argc) {
num_keys = atoi(argv[p]);
if (num_keys < 1) {
num_keys = 1;
}
}
cmd_benchmark(num_keys);
} else {
std::cerr << "Unrecogniced command: " << argv[1] << std::endl;
usage(argv[0]);