diff options
author | David Benjamin <davidben@google.com> | 2022-11-23 13:10:15 -0500 |
---|---|---|
committer | Boringssl LUCI CQ <boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-12-03 21:37:07 +0000 |
commit | 1a46f8fb6fb55247d43a0406edb9eca62e4c12c1 (patch) | |
tree | f13eed47f9ed58c187dd1f6ae35f5c6d1fa91bd7 /tool | |
parent | c477d1e33ed9fca7c75e375dcd51f1d644e1aded (diff) | |
download | boringssl-1a46f8fb6fb55247d43a0406edb9eca62e4c12c1.zip boringssl-1a46f8fb6fb55247d43a0406edb9eca62e4c12c1.tar.gz boringssl-1a46f8fb6fb55247d43a0406edb9eca62e4c12c1.tar.bz2 |
Switch microsecond and iteration counts in bssl speed to uint64_t.
We were mixing uint64_t and unsigned, which flagged -Wshorten-64-to-32.
While I'm here, switch the iteration count to uint64_t to cut down on
uses of 'unsigned'. While we have no real risk of overflow a u32 here,
counting the number of times we perform some operation in a loop would
probably best be u64.
(I'm guessing we originally used unsigned mostly so that %u worked. But
PRIu64 exists, though it's wordy.)
Bug: 516
Change-Id: I6abc24ecb029c2c223bb940c903d497868bab9fc
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/55455
Reviewed-by: Bob Beck <bbe@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
Diffstat (limited to 'tool')
-rw-r--r-- | tool/speed.cc | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/tool/speed.cc b/tool/speed.cc index abd387a..ee4b830 100644 --- a/tool/speed.cc +++ b/tool/speed.cc @@ -20,6 +20,7 @@ #include <assert.h> #include <errno.h> +#include <inttypes.h> #include <stdint.h> #include <stdlib.h> #include <string.h> @@ -66,17 +67,18 @@ static bool g_print_json = false; // TimeResults represents the results of benchmarking a function. struct TimeResults { // num_calls is the number of function calls done in the time period. - unsigned num_calls; + uint64_t num_calls; // us is the number of microseconds that elapsed in the time period. - unsigned us; + uint64_t us; void Print(const std::string &description) const { if (g_print_json) { PrintJSON(description); } else { - printf("Did %u %s operations in %uus (%.1f ops/sec)\n", num_calls, - description.c_str(), us, - (static_cast<double>(num_calls) / us) * 1000000); + printf( + "Did %" PRIu64 " %s operations in %" PRIu64 "us (%.1f ops/sec)\n", + num_calls, description.c_str(), us, + (static_cast<double>(num_calls) / static_cast<double>(us)) * 1000000); } } @@ -85,10 +87,13 @@ struct TimeResults { if (g_print_json) { PrintJSON(description, bytes_per_call); } else { - printf("Did %u %s operations in %uus (%.1f ops/sec): %.1f MB/s\n", - num_calls, description.c_str(), us, - (static_cast<double>(num_calls) / us) * 1000000, - static_cast<double>(bytes_per_call * num_calls) / us); + printf( + "Did %" PRIu64 " %s operations in %" PRIu64 + "us (%.1f ops/sec): %.1f MB/s\n", + num_calls, description.c_str(), us, + (static_cast<double>(num_calls) / static_cast<double>(us)) * 1000000, + static_cast<double>(bytes_per_call * num_calls) / + static_cast<double>(us)); } } @@ -99,7 +104,8 @@ struct TimeResults { puts(","); } - printf("{\"description\": \"%s\", \"numCalls\": %u, \"microseconds\": %u", + printf("{\"description\": \"%s\", \"numCalls\": %" PRIu64 + ", \"microseconds\": %" PRIu64, description.c_str(), num_calls, us); if (bytes_per_call > 0) { @@ -151,13 +157,13 @@ static bool TimeFunction(TimeResults *results, std::function<bool()> func) { // for. const uint64_t total_us = g_timeout_seconds * 1000000; uint64_t start = time_now(), now, delta; - unsigned done = 0, iterations_between_time_checks; if (!func()) { return false; } now = time_now(); delta = now - start; + unsigned iterations_between_time_checks; if (delta == 0) { iterations_between_time_checks = 250; } else { @@ -171,6 +177,7 @@ static bool TimeFunction(TimeResults *results, std::function<bool()> func) { } } + uint64_t done = 0; for (;;) { for (unsigned i = 0; i < iterations_between_time_checks; i++) { if (!func()) { @@ -204,7 +211,7 @@ static bool SpeedRSA(const std::string &selected) { {"RSA 4096", kDERRSAPrivate4096, kDERRSAPrivate4096Len}, }; - for (unsigned i = 0; i < OPENSSL_ARRAY_SIZE(kRSAKeys); i++) { + for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kRSAKeys); i++) { const std::string name = kRSAKeys[i].name; bssl::UniquePtr<RSA> key( @@ -301,9 +308,9 @@ static bool SpeedRSAKeyGen(const std::string &selected) { const std::vector<int> kSizes = {2048, 3072, 4096}; for (int size : kSizes) { const uint64_t start = time_now(); - unsigned num_calls = 0; - unsigned us; - std::vector<unsigned> durations; + uint64_t num_calls = 0; + uint64_t us; + std::vector<uint64_t> durations; for (;;) { bssl::UniquePtr<RSA> rsa(RSA_new()); @@ -336,18 +343,13 @@ static bool SpeedRSAKeyGen(const std::string &selected) { // Distribution information is useful, but doesn't fit into the standard // format used by |g_print_json|. if (!g_print_json) { - // |min| and |max| must be stored in temporary variables to avoid an MSVC - // bug on x86. There, size_t is a typedef for unsigned, but MSVC's printf - // warning tries to retain the distinction and suggest %zu for size_t - // instead of %u. It gets confused if std::vector<unsigned> and - // std::vector<size_t> are both instantiated. Being typedefs, the two - // instantiations are identical, which somehow breaks the size_t vs - // unsigned metadata. - unsigned min = durations[0]; - unsigned median = n & 1 ? durations[n / 2] + uint64_t min = durations[0]; + uint64_t median = n & 1 ? durations[n / 2] : (durations[n / 2 - 1] + durations[n / 2]) / 2; - unsigned max = durations[n - 1]; - printf(" min: %uus, median: %uus, max: %uus\n", min, median, max); + uint64_t max = durations[n - 1]; + printf(" min: %" PRIu64 "us, median: %" PRIu64 "us, max: %" PRIu64 + "us\n", + min, median, max); } } |