diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CMakeLists.txt | 9 | ||||
-rw-r--r-- | tests/ExecuteNetwork/ExecuteNetwork.cpp | 8 | ||||
-rw-r--r-- | tests/ExecuteNetwork/ExecuteNetworkParams.hpp | 3 | ||||
-rw-r--r-- | tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp | 5 | ||||
-rw-r--r-- | tests/ExecuteNetwork/TfliteExecutor.cpp | 35 |
5 files changed, 53 insertions, 7 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 102d744aa7..71374c4261 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -141,7 +141,8 @@ endif() if (BUILD_ARMNN_SERIALIZER OR BUILD_TF_LITE_PARSER OR BUILD_ONNX_PARSER - OR BUILD_CLASSIC_DELEGATE) + OR BUILD_CLASSIC_DELEGATE + OR BUILD_OPAQUE_DELEGATE) set(ExecuteNetwork_sources ExecuteNetwork/IExecutor.hpp ExecuteNetwork/ArmNNExecutor.cpp @@ -154,7 +155,7 @@ if (BUILD_ARMNN_SERIALIZER NetworkExecutionUtils/NetworkExecutionUtils.cpp NetworkExecutionUtils/NetworkExecutionUtils.hpp) - if(BUILD_CLASSIC_DELEGATE) + if(BUILD_CLASSIC_DELEGATE OR BUILD_OPAQUE_DELEGATE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-comment") set(ExecuteNetwork_sources ${ExecuteNetwork_sources} @@ -167,6 +168,7 @@ if (BUILD_ARMNN_SERIALIZER target_include_directories(ExecuteNetwork PRIVATE ../src/armnnUtils) target_include_directories(ExecuteNetwork PRIVATE ../src/backends) target_include_directories(ExecuteNetwork PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + if(EXECUTE_NETWORK_STATIC) target_link_libraries(ExecuteNetwork -Wl,--whole-archive @@ -189,6 +191,9 @@ if (BUILD_ARMNN_SERIALIZER if (BUILD_CLASSIC_DELEGATE) target_link_libraries(ExecuteNetwork ArmnnDelegate::ArmnnDelegate) endif() + if (BUILD_OPAQUE_DELEGATE) + target_link_libraries(ExecuteNetwork ArmnnDelegate::ArmnnOpaqueDelegate) + endif() target_link_libraries(ExecuteNetwork armnn) endif() diff --git a/tests/ExecuteNetwork/ExecuteNetwork.cpp b/tests/ExecuteNetwork/ExecuteNetwork.cpp index 14841ec1e9..f9f583a9c6 100644 --- a/tests/ExecuteNetwork/ExecuteNetwork.cpp +++ b/tests/ExecuteNetwork/ExecuteNetwork.cpp @@ -5,7 +5,7 @@ #include "ExecuteNetworkProgramOptions.hpp" #include "ArmNNExecutor.hpp" -#if defined(ARMNN_TFLITE_DELEGATE) +#if defined(ARMNN_TFLITE_DELEGATE) || defined(ARMNN_TFLITE_OPAQUE_DELEGATE) #include "TfliteExecutor.hpp" #endif #include <armnn/Logging.hpp> @@ -13,10 +13,12 @@ std::unique_ptr<IExecutor> BuildExecutor(ProgramOptions& programOptions) { - if (programOptions.m_ExNetParams.m_TfLiteExecutor == ExecuteNetworkParams::TfLiteExecutor::ArmNNTfLiteDelegate || + if (programOptions.m_ExNetParams.m_TfLiteExecutor == + ExecuteNetworkParams::TfLiteExecutor::ArmNNTfLiteOpaqueDelegate || + programOptions.m_ExNetParams.m_TfLiteExecutor == ExecuteNetworkParams::TfLiteExecutor::ArmNNTfLiteDelegate || programOptions.m_ExNetParams.m_TfLiteExecutor == ExecuteNetworkParams::TfLiteExecutor::TfliteInterpreter) { -#if defined(ARMNN_TFLITE_DELEGATE) +#if defined(ARMNN_TFLITE_DELEGATE) || defined(ARMNN_TFLITE_OPAQUE_DELEGATE) return std::make_unique<TfLiteExecutor>(programOptions.m_ExNetParams, programOptions.m_RuntimeOptions); #else ARMNN_LOG(fatal) << "Not built with Arm NN Tensorflow-Lite delegate support."; diff --git a/tests/ExecuteNetwork/ExecuteNetworkParams.hpp b/tests/ExecuteNetwork/ExecuteNetworkParams.hpp index 020dbdcced..ffcb4f482c 100644 --- a/tests/ExecuteNetwork/ExecuteNetworkParams.hpp +++ b/tests/ExecuteNetwork/ExecuteNetworkParams.hpp @@ -20,7 +20,8 @@ struct ExecuteNetworkParams { ArmNNTfLiteParser, ArmNNTfLiteDelegate, - TfliteInterpreter + TfliteInterpreter, + ArmNNTfLiteOpaqueDelegate, }; bool m_AllowExpandedDims; diff --git a/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp b/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp index 3a54b1ab19..8d5035e103 100644 --- a/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp +++ b/tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp @@ -355,6 +355,7 @@ ProgramOptions::ProgramOptions() : m_CxxOptions{"ExecuteNetwork", "Set the executor for the tflite model: parser, delegate, tflite" "parser is the ArmNNTfLiteParser, " "delegate is the ArmNNTfLiteDelegate, " + "opaquedelegate is the ArmNNTfLiteOpaqueDelegate, " "tflite is the TfliteInterpreter", cxxopts::value<std::string>()->default_value("parser")) @@ -539,6 +540,10 @@ void ProgramOptions::ParseOptions(int ac, const char* av[]) { m_ExNetParams.m_TfLiteExecutor = ExecuteNetworkParams::TfLiteExecutor::ArmNNTfLiteParser; } + else if (tfliteExecutor == "opaquedelegate") + { + m_ExNetParams.m_TfLiteExecutor = ExecuteNetworkParams::TfLiteExecutor::ArmNNTfLiteOpaqueDelegate; + } else if (tfliteExecutor == "delegate") { m_ExNetParams.m_TfLiteExecutor = ExecuteNetworkParams::TfLiteExecutor::ArmNNTfLiteDelegate; diff --git a/tests/ExecuteNetwork/TfliteExecutor.cpp b/tests/ExecuteNetwork/TfliteExecutor.cpp index 87731c2f83..04f6ddb72a 100644 --- a/tests/ExecuteNetwork/TfliteExecutor.cpp +++ b/tests/ExecuteNetwork/TfliteExecutor.cpp @@ -3,6 +3,11 @@ // SPDX-License-Identifier: MIT // +#if defined(ARMNN_TFLITE_OPAQUE_DELEGATE) +#include <../delegate/opaque/include/armnn_delegate.hpp> +#endif + +#include <tensorflow/lite/core/c/c_api.h> #include "TfliteExecutor.hpp" #include "tensorflow/lite/kernels/kernel_util.h" @@ -26,8 +31,33 @@ TfLiteExecutor::TfLiteExecutor(const ExecuteNetworkParams& params, armnn::IRunti { LogAndThrow("Failed to allocate tensors in the TfLiteInterpreter."); } - if (m_Params.m_TfLiteExecutor == ExecuteNetworkParams::TfLiteExecutor::ArmNNTfLiteDelegate) + + if (m_Params.m_TfLiteExecutor == ExecuteNetworkParams::TfLiteExecutor::ArmNNTfLiteOpaqueDelegate) + { +#if defined(ARMNN_TFLITE_OPAQUE_DELEGATE) + // Use default settings until options have been enabled + flatbuffers::FlatBufferBuilder flatBufferBuilder; + TFLiteSettingsBuilder tfliteSettingsBuilder(flatBufferBuilder); + flatbuffers::Offset<TFLiteSettings> tfliteSettings = tfliteSettingsBuilder.Finish(); + flatBufferBuilder.Finish(tfliteSettings); + const TFLiteSettings* settings = + flatbuffers::GetRoot<TFLiteSettings>(flatBufferBuilder.GetBufferPointer()); + + std::unique_ptr<delegates::DelegatePluginInterface> delegatePlugIn = + delegates::DelegatePluginRegistry::CreateByName("armnn_delegate", *settings); + + // Create Armnn Opaque Delegate from Armnn Delegate Plugin + delegates::TfLiteDelegatePtr armnnDelegate = delegatePlugIn->Create(); + + // Add Delegate to the builder + builder.AddDelegate(armnnDelegate.get()); +#else + LogAndThrow("Not built with Arm NN Tensorflow-Lite opaque delegate support."); +#endif + } + else if (m_Params.m_TfLiteExecutor == ExecuteNetworkParams::TfLiteExecutor::ArmNNTfLiteDelegate) { +#if defined(ARMNN_TFLITE_DELEGATE) // Create the Armnn Delegate // Populate a DelegateOptions from the ExecuteNetworkParams. armnnDelegate::DelegateOptions delegateOptions = m_Params.ToDelegateOptions(); @@ -40,6 +70,9 @@ TfLiteExecutor::TfLiteExecutor(const ExecuteNetworkParams& params, armnn::IRunti { LogAndThrow("Could not register ArmNN TfLite Delegate to TfLiteInterpreter."); } +#else + LogAndThrow("Not built with Arm NN Tensorflow-Lite delegate support."); +#endif } else { |