aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>2023-05-05 16:39:05 +0100
committerFrancis Murtagh <francis.murtagh@arm.com>2023-05-08 13:19:15 +0000
commit46e574e8195ae2e8085086457a642210d9d3b8cd (patch)
treeb3a7b2bdc86b222509f5110c177a82646a58797b /tests
parent97a3aefff63ae081ae62aa5bac17d6e9c401937e (diff)
downloadarmnn-46e574e8195ae2e8085086457a642210d9d3b8cd.tar.gz
IVGCVSW-7626 Add Execute Network for Opaque Delegate
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com> Change-Id: Ibdded86713368ecfdf31c4118dfe8a3404d1e3b8
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt9
-rw-r--r--tests/ExecuteNetwork/ExecuteNetwork.cpp8
-rw-r--r--tests/ExecuteNetwork/ExecuteNetworkParams.hpp3
-rw-r--r--tests/ExecuteNetwork/ExecuteNetworkProgramOptions.cpp5
-rw-r--r--tests/ExecuteNetwork/TfliteExecutor.cpp35
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
{