diff options
Diffstat (limited to 'tests/tools/tflite_benchmark/src/tflite_benchmark.cc')
-rw-r--r-- | tests/tools/tflite_benchmark/src/tflite_benchmark.cc | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/tests/tools/tflite_benchmark/src/tflite_benchmark.cc b/tests/tools/tflite_benchmark/src/tflite_benchmark.cc index d52ef0163..783a5cb2a 100644 --- a/tests/tools/tflite_benchmark/src/tflite_benchmark.cc +++ b/tests/tools/tflite_benchmark/src/tflite_benchmark.cc @@ -25,6 +25,7 @@ #include "misc/tensor/IndexIterator.h" #include <chrono> +#include <cmath> #include <iostream> #include <thread> @@ -73,17 +74,27 @@ public: { ++_num; _sum += val; + _log_sum += std::log(val); _min = std::min(_min, val); _max = std::max(_max, val); } T mean() const { return _sum / static_cast<T>(_num); } + // Calculating geometric mean with logs + // "Geometric Mean of (V1, V2, ... Vn)" + // = (V1*V2*...*Vn)^(1/n) + // = exp(log((V1*V2*...*Vn)^(1/n))) + // = exp(log((V1*V2*...*Vn)/n))) + // = exp((log(V1) + log(V2) + ... + log(Vn))/n) + // = exp(_log_sum/num) + T geomean() const { return std::exp(_log_sum / static_cast<T>(_num)); } T min() const { return _min; } T max() const { return _max; } private: uint32_t _num = 0u; T _sum = 0.0; + T _log_sum = 0.0; T _min = std::numeric_limits<T>::max(); T _max = std::numeric_limits<T>::lowest(); }; @@ -118,6 +129,7 @@ int main(const int argc, char **argv) const bool use_nnapi = nnfw::misc::EnvVar("USE_NNAPI").asBool(false); const auto thread_count = nnfw::misc::EnvVar("THREAD").asInt(-1); const auto pause = nnfw::misc::EnvVar("PAUSE").asInt(0); + const auto microsec = nnfw::misc::EnvVar("MICROSEC").asBool(0); std::cout << "Num threads: " << thread_count << std::endl; if (use_nnapi) @@ -131,6 +143,18 @@ int main(const int argc, char **argv) std::cout << "Insert " << pause << "s pause between iterations" << std::endl; } + struct TimeUnit + { + const char *str; + std::function<int64_t(int64_t)> conv; + } tu = {"ms", [](int64_t v) { return v / 1000; }}; + + if (microsec) + { + tu.str = "us"; + tu.conv = [](int64_t v) { return v; }; + } + StderrReporter error_reporter; std::unique_ptr<tflite::TfLiteVerifier> verifier{new BMFlatBufferVerifier}; @@ -198,7 +222,7 @@ int main(const int argc, char **argv) // for (uint32_t n = 0; n < 3; ++n) { - std::chrono::milliseconds elapsed(0); + std::chrono::microseconds elapsed(0); sess->prepare(); @@ -256,7 +280,7 @@ int main(const int argc, char **argv) }; sess->teardown(); - std::cout << "Warming-up " << n << ": " << elapsed.count() << "ms" << std::endl; + std::cout << "Warming-up " << n << ": " << tu.conv(elapsed.count()) << tu.str << std::endl; } // @@ -268,7 +292,7 @@ int main(const int argc, char **argv) for (int n = 0; n < cnt; ++n) { - std::chrono::milliseconds elapsed(0); + std::chrono::microseconds elapsed(0); sess->prepare(); nnfw::misc::benchmark::measure(elapsed) << [&](void) { @@ -281,7 +305,7 @@ int main(const int argc, char **argv) acc(elapsed.count()); - std::cout << "Iteration " << n << ": " << elapsed.count() << "ms" << std::endl; + std::cout << "Iteration " << n << ": " << tu.conv(elapsed.count()) << tu.str << std::endl; // Insert "pause" if ((n != cnt - 1) && (pause > 0)) @@ -290,10 +314,16 @@ int main(const int argc, char **argv) } } + auto v_min = tu.conv(acc.min()); + auto v_max = tu.conv(acc.max()); + auto v_mean = tu.conv(acc.mean()); + auto v_geomean = tu.conv(acc.geomean()); + std::cout << "--------" << std::endl; - std::cout << "Min: " << acc.min() << "ms" << std::endl; - std::cout << "Max: " << acc.max() << "ms" << std::endl; - std::cout << "Mean: " << acc.mean() << "ms" << std::endl; + std::cout << "Min: " << v_min << tu.str << std::endl; + std::cout << "Max: " << v_max << tu.str << std::endl; + std::cout << "Mean: " << v_mean << tu.str << std::endl; + std::cout << "GeoMean: " << v_geomean << tu.str << std::endl; return 0; } |