diff --git a/tensorflow/lite/experimental/delegates/hexagon/builders/tests/hexagon_delegate_op_model.h b/tensorflow/lite/experimental/delegates/hexagon/builders/tests/hexagon_delegate_op_model.h index e2c63e4b8b1cc6f800ef950dca7d555eafc322b3..9fd9dc6917234cb8d241c081dda990d6919d73a2 100644 --- a/tensorflow/lite/experimental/delegates/hexagon/builders/tests/hexagon_delegate_op_model.h +++ b/tensorflow/lite/experimental/delegates/hexagon/builders/tests/hexagon_delegate_op_model.h @@ -44,6 +44,8 @@ class SingleOpModelWithHexagon : public SingleOpModel { "vendor/lib/rfsa/adsp;/dsp", 1 /*overwrite*/); + // For tests, we use one-op-models. + params_.min_nodes_per_partition = 1; auto* delegate_ptr = TfLiteHexagonDelegateCreate(¶ms_); ASSERT_TRUE(delegate_ptr != nullptr); delegate_ = Interpreter::TfLiteDelegatePtr( diff --git a/tensorflow/lite/experimental/delegates/hexagon/hexagon_delegate.cc b/tensorflow/lite/experimental/delegates/hexagon/hexagon_delegate.cc index 20d74605baafc917ca9c724b73f0ba3c9728c1e9..8810df4257f4f863ebd2dcf0e57d47e4cafa61ca 100644 --- a/tensorflow/lite/experimental/delegates/hexagon/hexagon_delegate.cc +++ b/tensorflow/lite/experimental/delegates/hexagon/hexagon_delegate.cc @@ -95,7 +95,7 @@ TfLiteStatus DelegatePrepare(TfLiteContext* context, TfLiteDelegate* delegate) { TfLiteHexagonDelegateOptions* params = static_cast(delegate->data_); const auto delegate_partitions = helper.GetFirstNLargestPartitions( - params->max_delegated_partitions, kMinNodesPerHexagonGraph); + params->max_delegated_partitions, params->min_nodes_per_partition); // To avoid creating a new TfLiteIntArray and free it later, we reserve one // element to represent TfLiteIntArray.size which is the 1st element of @@ -133,6 +133,9 @@ class HexagonDelegate : public TfLiteDelegate { params_.max_delegated_partitions, kMaxMaxHexagonGraphs); params_.max_delegated_partitions = kMaxMaxHexagonGraphs; } + if (params_.min_nodes_per_partition <= 0) { + params_.min_nodes_per_partition = kMinNodesPerHexagonGraph; + } } TfLiteHexagonDelegateOptions* params() { return ¶ms_; } diff --git a/tensorflow/lite/experimental/delegates/hexagon/hexagon_delegate.h b/tensorflow/lite/experimental/delegates/hexagon/hexagon_delegate.h index 4995605e9fb9b67f8ee7f53755223e4c8297c6b3..d3230f1376e63e1ad4977dc076140bcd847e4ea0 100644 --- a/tensorflow/lite/experimental/delegates/hexagon/hexagon_delegate.h +++ b/tensorflow/lite/experimental/delegates/hexagon/hexagon_delegate.h @@ -55,6 +55,9 @@ struct TFL_CAPI_EXPORT TfLiteHexagonDelegateOptions { // hexagon_nn_init. Each graph corresponds to one delegated node subset in the // TFLite model. int max_delegated_partitions; + // This sets the minimum number of nodes per graph created with + // hexagon_nn_init. Defaults to 2. + int min_nodes_per_partition; }; // Return a delegate that uses Hexagon SDK for ops execution.