Not yet public
PiperOrigin-RevId: 319040214 Change-Id: I95edff062ee32c713df97752b29e7172bfe6aec3
This commit is contained in:
parent
cf034314e9
commit
eb27343a9d
@ -69,6 +69,13 @@ enum NNAPIExecutionPreference {
|
|||||||
NNAPI_SUSTAINED_SPEED = 3;
|
NNAPI_SUSTAINED_SPEED = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum NNAPIExecutionPriority {
|
||||||
|
NNAPI_PRIORITY_UNDEFINED = 0;
|
||||||
|
NNAPI_PRIORITY_LOW = 1;
|
||||||
|
NNAPI_PRIORITY_MEDIUM = 2;
|
||||||
|
NNAPI_PRIORITY_HIGH = 3;
|
||||||
|
}
|
||||||
|
|
||||||
// One possible acceleration configuration.
|
// One possible acceleration configuration.
|
||||||
message ComputeSettings {
|
message ComputeSettings {
|
||||||
// Which preference to use this accelerator for.
|
// Which preference to use this accelerator for.
|
||||||
@ -110,6 +117,8 @@ message NNAPISettings {
|
|||||||
// performs less well than the TfLite built-in kernels; but allowing allows a
|
// performs less well than the TfLite built-in kernels; but allowing allows a
|
||||||
// model to be partially accelerated which may be a win.
|
// model to be partially accelerated which may be a win.
|
||||||
optional bool allow_nnapi_cpu_on_android_10_plus = 7;
|
optional bool allow_nnapi_cpu_on_android_10_plus = 7;
|
||||||
|
|
||||||
|
optional NNAPIExecutionPriority execution_priority = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Which GPU backend to select. Default behaviour on Android is to try OpenCL
|
// Which GPU backend to select. Default behaviour on Android is to try OpenCL
|
||||||
|
@ -39,6 +39,20 @@ ConvertExecutionPrefence(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline int ConvertExecutionPriority(
|
||||||
|
NNAPIExecutionPriority from_compatibility_priority) {
|
||||||
|
switch (from_compatibility_priority) {
|
||||||
|
case NNAPIExecutionPriority_NNAPI_PRIORITY_LOW:
|
||||||
|
return ANEURALNETWORKS_PRIORITY_LOW;
|
||||||
|
case NNAPIExecutionPriority_NNAPI_PRIORITY_MEDIUM:
|
||||||
|
return ANEURALNETWORKS_PRIORITY_MEDIUM;
|
||||||
|
case NNAPIExecutionPriority_NNAPI_PRIORITY_HIGH:
|
||||||
|
return ANEURALNETWORKS_PRIORITY_HIGH;
|
||||||
|
default:
|
||||||
|
return ANEURALNETWORKS_PRIORITY_DEFAULT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class NnapiPlugin : public DelegatePluginInterface {
|
class NnapiPlugin : public DelegatePluginInterface {
|
||||||
public:
|
public:
|
||||||
TfLiteDelegatePtr Create() override {
|
TfLiteDelegatePtr Create() override {
|
||||||
@ -80,6 +94,8 @@ class NnapiPlugin : public DelegatePluginInterface {
|
|||||||
ConvertExecutionPrefence(nnapi_settings->execution_preference());
|
ConvertExecutionPrefence(nnapi_settings->execution_preference());
|
||||||
options_.disallow_nnapi_cpu =
|
options_.disallow_nnapi_cpu =
|
||||||
!nnapi_settings->allow_nnapi_cpu_on_android_10_plus();
|
!nnapi_settings->allow_nnapi_cpu_on_android_10_plus();
|
||||||
|
options_.execution_priority =
|
||||||
|
ConvertExecutionPriority(nnapi_settings->execution_priority());
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -18,6 +18,7 @@ limitations under the License.
|
|||||||
#include "flatbuffers/flatbuffers.h" // from @flatbuffers
|
#include "flatbuffers/flatbuffers.h" // from @flatbuffers
|
||||||
#include "tensorflow/lite/c/common.h"
|
#include "tensorflow/lite/c/common.h"
|
||||||
#include "tensorflow/lite/delegates/nnapi/nnapi_delegate.h"
|
#include "tensorflow/lite/delegates/nnapi/nnapi_delegate.h"
|
||||||
|
#include "tensorflow/lite/delegates/nnapi/nnapi_delegate_kernel.h"
|
||||||
#include "tensorflow/lite/delegates/nnapi/nnapi_delegate_mock_test.h"
|
#include "tensorflow/lite/delegates/nnapi/nnapi_delegate_mock_test.h"
|
||||||
#include "tensorflow/lite/experimental/acceleration/configuration/configuration_generated.h"
|
#include "tensorflow/lite/experimental/acceleration/configuration/configuration_generated.h"
|
||||||
#include "tensorflow/lite/experimental/acceleration/configuration/delegate_registry.h"
|
#include "tensorflow/lite/experimental/acceleration/configuration/delegate_registry.h"
|
||||||
@ -82,6 +83,25 @@ class NNAPIPluginTest : public ::testing::Test {
|
|||||||
kTfLiteOk)
|
kTfLiteOk)
|
||||||
<< " given input: " << input << " expected output: " << output;
|
<< " given input: " << input << " expected output: " << output;
|
||||||
}
|
}
|
||||||
|
template <NNAPIExecutionPriority input, int output>
|
||||||
|
void CheckExecutionPriority() {
|
||||||
|
// Note - this uses a template since the NNAPI functions are C function
|
||||||
|
// pointers rather than lambdas so can't capture variables.
|
||||||
|
nnapi_->ANeuralNetworksCompilation_setPriority =
|
||||||
|
[](ANeuralNetworksCompilation* compilation, int32_t priority) {
|
||||||
|
return priority - output;
|
||||||
|
};
|
||||||
|
CreateDelegate(CreateNNAPISettings(fbb_, 0, 0, 0,
|
||||||
|
NNAPIExecutionPreference_UNDEFINED, 0, 0,
|
||||||
|
/*allow CPU=*/true, input));
|
||||||
|
// Since delegation succeeds, the model becomes immutable and hence can't
|
||||||
|
// reuse it.
|
||||||
|
SingleAddOpModel model;
|
||||||
|
model.Build();
|
||||||
|
EXPECT_EQ(model.Interpreter()->ModifyGraphWithDelegate(delegate_.get()),
|
||||||
|
kTfLiteOk)
|
||||||
|
<< " given input: " << input << " expected output: " << output;
|
||||||
|
}
|
||||||
|
|
||||||
void CreateDelegate(flatbuffers::Offset<NNAPISettings> settings) {
|
void CreateDelegate(flatbuffers::Offset<NNAPISettings> settings) {
|
||||||
settings_ = flatbuffers::GetTemporaryPointer(
|
settings_ = flatbuffers::GetTemporaryPointer(
|
||||||
@ -124,6 +144,19 @@ TEST_F(NNAPIPluginTest, PassesExecutionPreference) {
|
|||||||
StatefulNnApiDelegate::Options::kSustainedSpeed>();
|
StatefulNnApiDelegate::Options::kSustainedSpeed>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(NNAPIPluginTest, PassesExecutionPriority) {
|
||||||
|
nnapi_->android_sdk_version =
|
||||||
|
tflite::delegate::nnapi::kMinSdkVersionForNNAPI13;
|
||||||
|
CheckExecutionPriority<NNAPIExecutionPriority_NNAPI_PRIORITY_UNDEFINED,
|
||||||
|
ANEURALNETWORKS_PRIORITY_DEFAULT>();
|
||||||
|
CheckExecutionPriority<NNAPIExecutionPriority_NNAPI_PRIORITY_LOW,
|
||||||
|
ANEURALNETWORKS_PRIORITY_LOW>();
|
||||||
|
CheckExecutionPriority<NNAPIExecutionPriority_NNAPI_PRIORITY_MEDIUM,
|
||||||
|
ANEURALNETWORKS_PRIORITY_MEDIUM>();
|
||||||
|
CheckExecutionPriority<NNAPIExecutionPriority_NNAPI_PRIORITY_HIGH,
|
||||||
|
ANEURALNETWORKS_PRIORITY_HIGH>();
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(NNAPIPluginTest, PassesCachingParameters) {
|
TEST_F(NNAPIPluginTest, PassesCachingParameters) {
|
||||||
nnapi_->ANeuralNetworksCompilation_setCaching =
|
nnapi_->ANeuralNetworksCompilation_setCaching =
|
||||||
[](ANeuralNetworksCompilation* compilation, const char* cacheDir,
|
[](ANeuralNetworksCompilation* compilation, const char* cacheDir,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user