1. Expose the hexagon delegate option for the multi-run-spec benchmark model tool.

2. Simply return if 'none' is set when creating different performance options.

PiperOrigin-RevId: 290582032
Change-Id: I0dfb18bfe3237fa37a860c3e6fca51a04ad77c04
This commit is contained in:
Chao Mei 2020-01-20 02:19:22 -08:00 committed by TensorFlower Gardener
parent ca9b58dfcf
commit 9ea3ee2be7

View File

@ -33,6 +33,11 @@ limitations under the License.
#include "tensorflow/lite/tools/benchmark/logging.h" #include "tensorflow/lite/tools/benchmark/logging.h"
#include "tensorflow/lite/tools/command_line_flags.h" #include "tensorflow/lite/tools/command_line_flags.h"
#if (defined(ANDROID) || defined(__ANDROID__)) && \
(defined(__arm__) || defined(__aarch64__))
#define TFLITE_ENABLE_HEXAGON
#endif
namespace tflite { namespace tflite {
namespace benchmark { namespace benchmark {
@ -62,6 +67,13 @@ void MultiRunStatsRecorder::OnBenchmarkStart(const BenchmarkParams& params) {
return; return;
} }
#if defined(TFLITE_ENABLE_HEXAGON)
if (params.Get<bool>("use_hexagon")) {
current_run_name_ = "dsp w/ hexagon";
return;
}
#endif
// Handle cases run on CPU // Handle cases run on CPU
// Note: could use std::to_string to convert an integer to string but it // Note: could use std::to_string to convert an integer to string but it
// requires C++11. // requires C++11.
@ -202,7 +214,12 @@ bool BenchmarkPerformanceOptions::ParsePerfOptions() {
std::vector<std::string> BenchmarkPerformanceOptions::GetValidPerfOptions() std::vector<std::string> BenchmarkPerformanceOptions::GetValidPerfOptions()
const { const {
return {"all", "cpu", "gpu", "nnapi", "none"}; std::vector<std::string> valid_options = {"all", "cpu", "gpu", "nnapi",
"none"};
#if defined(TFLITE_ENABLE_HEXAGON)
valid_options.emplace_back("dsp");
#endif
return valid_options;
} }
bool BenchmarkPerformanceOptions::HasOption(const std::string& option) const { bool BenchmarkPerformanceOptions::HasOption(const std::string& option) const {
@ -218,20 +235,25 @@ void BenchmarkPerformanceOptions::ResetPerformanceOptions() {
single_option_run_params_->Set<bool>("use_nnapi", false); single_option_run_params_->Set<bool>("use_nnapi", false);
single_option_run_params_->Set<std::string>("nnapi_accelerator_name", ""); single_option_run_params_->Set<std::string>("nnapi_accelerator_name", "");
#endif #endif
#if defined(TFLITE_ENABLE_HEXAGON)
single_option_run_params_->Set<bool>("use_hexagon", false);
#endif
} }
void BenchmarkPerformanceOptions::CreatePerformanceOptions() { void BenchmarkPerformanceOptions::CreatePerformanceOptions() {
TFLITE_LOG(INFO) << "The list of TFLite runtime options to be benchmarked: [" TFLITE_LOG(INFO) << "The list of TFLite runtime options to be benchmarked: ["
<< params_.Get<std::string>("perf_options_list") << "]"; << params_.Get<std::string>("perf_options_list") << "]";
const bool benchmark_all = HasOption("all");
if (HasOption("none")) { if (HasOption("none")) {
// Just add an empty BenchmarkParams instance. // Just add an empty BenchmarkParams instance.
BenchmarkParams params; BenchmarkParams params;
all_run_params_.emplace_back(std::move(params)); all_run_params_.emplace_back(std::move(params));
// As 'none' is exclusive to others, simply return here.
return;
} }
const bool benchmark_all = HasOption("all");
if (benchmark_all || HasOption("cpu")) { if (benchmark_all || HasOption("cpu")) {
const std::vector<int> num_threads = {1, 2, 4}; const std::vector<int> num_threads = {1, 2, 4};
for (const int count : num_threads) { for (const int count : num_threads) {
@ -280,6 +302,14 @@ void BenchmarkPerformanceOptions::CreatePerformanceOptions() {
all_run_params_.emplace_back(std::move(params)); all_run_params_.emplace_back(std::move(params));
} }
#endif #endif
#if defined(TFLITE_ENABLE_HEXAGON)
if (benchmark_all || HasOption("dsp")) {
BenchmarkParams params;
params.AddParam("use_hexagon", BenchmarkParam::Create<bool>(true));
all_run_params_.emplace_back(std::move(params));
}
#endif
} }
void BenchmarkPerformanceOptions::Run() { void BenchmarkPerformanceOptions::Run() {