tree: 57a279044ff7a168aa469db98622bb2d9361c05c [path history] [tgz]
  1. aclCommon/
  2. cl/
  3. neon/
  4. reference/
  5. test/
  6. BackendRegistry.cpp
  7. BackendRegistry.hpp
  8. backends.cmake
  9. CMakeLists.txt
  10. common.mk
  11. CpuTensorHandle.cpp
  12. CpuTensorHandle.hpp
  13. CpuTensorHandleFwd.hpp
  14. IBackendInternal.hpp
  15. ILayerSupport.cpp
  16. ITensorHandle.hpp
  17. MakeWorkloadHelper.hpp
  18. MemCopyWorkload.cpp
  19. MemCopyWorkload.hpp
  20. OutputHandler.cpp
  21. OutputHandler.hpp
  22. README.md
  23. StringMapping.cpp
  24. StringMapping.hpp
  25. Workload.hpp
  26. WorkloadData.cpp
  27. WorkloadData.hpp
  28. WorkloadDataCollector.hpp
  29. WorkloadDataFwd.hpp
  30. WorkloadFactory.cpp
  31. WorkloadFactory.hpp
  32. WorkloadInfo.hpp
  33. WorkloadUtils.hpp
src/backends/README.md

Backend developer guide

ArmNN allows adding new backends through the ‘Pluggable Backend’ mechanism.

How to add a new backend

Backends reside under src/backends in separate subfolders. They must have a backend.cmake file which is read automatically by src/backends/backends.cmake. The backend.cmake file under the backend specific folder is then included by the main CMakeLists.txt file at the root of the ArmNN source tree.

The backend.cmake file

The backend.cmake has two main purposes:

  1. It makes sure the artifact (typically a static library) is linked into the ArmNN shared library.
  2. It makes sure that the subdirectory where backend sources reside gets included in the build.

To achieve this there are two requirements for the backend.cmake file (example taken from reference/backend.cmake)

#
# Make sure the reference backend is included in the build.
# By adding the subdirectory, cmake requires the presence of CMakeLists.txt
# in the reference (backend) folder.
#
add_subdirectory(${PROJECT_SOURCE_DIR}/src/backends/reference)

#
# Add the static libraries built by the reference backend to the
# list of libraries linked against the ArmNN shared library.
#
list(APPEND armnnLibraries armnnRefBackend armnnRefBackendWorkloads)

The CMakeLists.txt file

As described in the previous section, adding a new backend will require creating a CMakeLists.txt in the backend folder. This follows the standard cmake conventions, and is required to build an artifact to be linked into the ArmNN shared library. As with any cmake build, the code can be structured into subfolders and modules as the developer sees fit.

Example can be found under reference/CMakeLists.txt.

The backend.mk file

ArmNN on Android uses the native Android build system. New backends are integrated by creating a backend.mk file which has a single variable called BACKEND_SOURCES listing all cpp files to be built by the Android build system.

Example taken from reference/backend.mk:

BACKEND_SOURCES := \
        RefLayerSupport.cpp \
        RefWorkloadFactory.cpp \
        workloads/Activation.cpp \
        workloads/ArithmeticFunction.cpp \
        workloads/Broadcast.cpp \
        ...

How to add common code across backends

For multiple backends that need common code, there is support for including them in the build similarly to the backend code. This requires adding three files under a subfolder at the same level as the backends folders. These are:

  1. common.cmake
  2. common.mk
  3. CMakeLists.txt

They work the same way as the backend files. The only difference between them is that common code is built first, so the backend code can depend on them.

aclCommon is an example for this concept and you can find the corresponding files:

  1. aclCommon/common.cmake
  2. aclCommon/common.mk
  3. aclCommon/CMakeLists.txt