From f2fa51031b0cf64a93da1dec9d3abd8c4ee3a13c Mon Sep 17 00:00:00 2001 From: Narumol Prangnawarat Date: Thu, 12 Dec 2019 15:10:38 +0000 Subject: IVGCVSW-4214 Add README for standalone dynamic backend developer guide * Add README of an example how to build standalone dynamic backends * Change the links to public API for backends Signed-off-by: Narumol Prangnawarat Change-Id: I32ee15ba1b9ea3a6317ae184de8d28bb31eb5d9d --- src/backends/README.md | 6 +++--- src/dynamic/README.md | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 src/dynamic/README.md diff --git a/src/backends/README.md b/src/backends/README.md index 4c59222097..6005facacb 100644 --- a/src/backends/README.md +++ b/src/backends/README.md @@ -105,7 +105,7 @@ with previous Arm NN versions. ## The IBackendInternal interface -All backends need to implement the [IBackendInternal](backendsCommon/IBackendInternal.hpp) interface. +All backends need to implement the [IBackendInternal](../../include/armnn/backends/IBackendInternal.hpp) interface. The interface functions to be implemented are: ```c++ @@ -152,7 +152,7 @@ it sees fit and it keeps these objects for a short period of time. Examples: As mentioned above, all backends need to be registered through the BackendRegistry so Arm NN knows about them. Registration requires a unique backend ID string and a lambda function that -returns a unique pointer to the [IBackendInternal interface](backendsCommon/IBackendInternal.hpp). +returns a unique pointer to the [IBackendInternal interface](../../include/armnn/backends/IBackendInternal.hpp). For registering a backend only this lambda function needs to exist, not the actual backend. This allows dynamically creating the backend objects when they are needed. @@ -215,7 +215,7 @@ is still in place for backward compatibility, but it's now considered deprecated ## The IBackendContext interface Backends may need to be notified whenever a network is loaded or unloaded. To support that, one can implement the optional -[IBackendContext](backendsCommon/IBackendContext.hpp) interface. The framework calls the ```CreateBackendContext(...)``` +[IBackendContext](../../include/armnn/backends/IBackendContext.hpp) interface. The framework calls the ```CreateBackendContext(...)``` method for each backend in the Runtime. If the backend returns a valid unique pointer to a backend context, then the runtime will hold this for its entire lifetime. It then calls the following interface functions for each stored context: diff --git a/src/dynamic/README.md b/src/dynamic/README.md new file mode 100644 index 0000000000..ccdb668e73 --- /dev/null +++ b/src/dynamic/README.md @@ -0,0 +1,33 @@ +# Standalone dynamic backend developer guide + +Arm NN allows adding new dynamic backends. Dynamic Backends can be compiled as standalone against Arm NN +and can be loaded by Arm NN dynamically at runtime. + +To be properly loaded and used, the backend instances must comply to the standard interface for dynamic backends +and to the versioning rules that enforce ABI compatibility. +The details of how to add dynamic backends can be found in [src/backends/README.md](../backends/README.md). + + +## Standalone dynamic backend example + +The source code includes an example that is used to generate a dynamic implementation of the reference backend +is provided at + +[RefDynamicBackend.hpp](./reference/RefDynamicBackend.hpp) +[RefDynamicBackend.cpp](./reference/RefDynamicBackend.cpp) + +The makefile used for building the standalone reference dynamic backend is also provided: +[CMakeLists.txt](./reference/CMakeLists.txt) + + +## Dynamic backend loading paths + +During the creation of the Runtime, Arm NN will scan a given set of paths searching for suitable dynamic backend objects to load. +A list of (absolute) paths can be specified at compile-time by setting a define named ```DYNAMIC_BACKEND_PATHS``` + in the form of a colon-separated list of strings. + +```shell +-DDYNAMIC_BACKEND_PATHS="PATH_1:PATH_2...:PATH_N" +``` + +The paths will be processed in the same order as they are indicated in the macro. -- cgit v1.2.1