blob: 0f6f7fd6cbe20792f395ec632e6e4b52236a4064 [file] [log] [blame]
#include "caffe2/core/init.h"
#include "caffe2/predictor/emulator/std_output_formatter.h"
#include "benchmark.h"
// Basic benchmark params
C10_DEFINE_int(warmup, 10000, "The number of iterations to warm up.");
C10_DEFINE_int(iter, 10000000, "The number of iterations to run.");
C10_DEFINE_int(threads, 32, "The number of threads to run.");
C10_DEFINE_int(runs, 10, "The number of independent runs.");
// Benchmark setup params
C10_DEFINE_int(
num_loading_threads,
56,
"The number of threads to build predictors.");
// Benchmark model params
C10_DEFINE_string(run_net, "", "The given net to benchmark.");
C10_DEFINE_string(init_net, "", "The given net to initialize.");
C10_DEFINE_string(data_net, "", "The given net to get input data.");
C10_DEFINE_string(
input_dims,
"",
"The path of the file that "
"stores input dimensions of all the operators in the run net. "
"Each element of the array is a mapping from "
"operator index to its input dimension.");
C10_DEFINE_string(
input_types,
"",
"The path of the file that "
"stores input types of all the operators in the run net. "
"Each element of the array is a mapping from "
"operator index to its input types.");
namespace caffe2 {
namespace emulator {
void BenchmarkRunner::benchmark(const BenchmarkParam& param) {
param.emulator->init();
std::vector<float> durations_ms;
for (size_t run = 0; run < FLAGS_runs; ++run) {
LOG(WARNING) << "Starting run " << run + 1;
LOG(INFO) << "Warming up " << FLAGS_threads << " threads with "
<< FLAGS_warmup << " iterations...";
param.emulator->run(FLAGS_warmup);
LOG(INFO) << "Starting benchmark with " << FLAGS_iter << " iterations...";
pre_benchmark_setup();
const auto duration_ms =
param.profiler->profile([&]() { param.emulator->run(FLAGS_iter); });
durations_ms.emplace_back(duration_ms);
auto throughput = FLAGS_iter / (duration_ms / MS_IN_SECOND);
LOG(INFO) << "Benchmark run finished in " << duration_ms / MS_IN_SECOND
<< " seconds.\n"
<< "Throughput:\t\t" << throughput << " iterations/s\n";
post_benchmark_cleanup();
LOG(INFO) << "Run " << run + 1 << " finished";
}
LOG(WARNING) << param.formatter->format(
durations_ms, FLAGS_threads, FLAGS_iter);
}
} // namespace emulator
} // namespace caffe2