Go to file
Kee c4e75674fa
Refine platform code and samples (#713)
* Refine platform code and samples

1. Support viplite v2 API
2. Unify the Lite and Native platform APIs so that the same code
   can run on different platforms through different compilation options.

Type: Code Improvement

Signed-off-by: Kee <xuke537@hotmail.com>

* Fix build error if VSI device API is not supported

Signed-off-by: Kee <xuke537@hotmail.com>

---------

Signed-off-by: Kee <xuke537@hotmail.com>
2025-10-13 13:15:31 +08:00
.github/workflows update CI workflows to use v4 of the artifact actions (#714) 2025-10-09 18:39:22 +08:00
cmake Refine platform code and samples (#713) 2025-10-13 13:15:31 +08:00
docs Update timvx_overview.svg (#701) 2024-07-29 10:44:04 +08:00
include/tim Refine platform code and samples (#713) 2025-10-13 13:15:31 +08:00
prebuilt-sdk Rebuild prebuil-sdk to adjust lower ubuntu env (#658) 2023-11-09 15:44:34 +08:00
samples Refine platform code and samples (#713) 2025-10-13 13:15:31 +08:00
src/tim Refine platform code and samples (#713) 2025-10-13 13:15:31 +08:00
third_party/half Added general Float16 support (#631) 2023-08-12 10:04:16 +08:00
toolchains support build for tensorflow A311D 2021-02-07 10:33:04 +08:00
.bazelrc Add prebuild support for VIPLite 2021-05-14 18:31:08 +08:00
.bazelversion Fix bazel BUILD 2021-10-20 16:18:48 +08:00
.clang-format Add shuffle_channel support & test for tim::vx 2021-09-07 22:44:57 +08:00
.gitignore Integrate api trace into tim-vx source as an experimental feature. (#623) 2023-07-19 18:40:48 +08:00
Android.mk Minor cleanup 2021-05-06 19:48:36 +08:00
BUILD Added general Float16 support (#631) 2023-08-12 10:04:16 +08:00
CMakeLists.txt Add json third party when support node trace db (#670) 2023-12-20 21:26:42 +08:00
LICENSE Add license declaration of third party (#672) 2024-01-03 13:09:52 +08:00
README.md Update README.md 2024-12-12 09:24:49 +08:00
VERSION Update internal ovxlib to release/1.2.22 (#706) 2025-01-08 13:22:46 +08:00
WORKSPACE Release 1.1.34 2021-10-08 12:36:02 +08:00
gen_vsi_feat_ops_def.sh Add BUILD_WITH_BAZEL option, marco of VSI_FEAT_OP_XXX should behind headers now. 2022-11-22 21:39:02 +08:00

README.md

TIM-VX - Tensor Interface Module

bazel_x86_vsim_unit_test cmake_x86_vsim

TIM-VX is a software integration module provided by VeriSilicon to facilitate deployment of Neural-Networks on Verisilicon ML accelerators. It serves as the backend binding for runtime frameworks such as Android NN, Tensorflow-Lite, MLIR, TVM and more.

Main Features

  • Over 150 operators with rich format support for both quantized and floating point
  • Simplified C++ binding API calls to create Tensors and Operations Guide
  • Dynamic graph construction with support for shape inference and layout inference
  • Built-in custom layer extensions
  • A set of utility functions for debugging

Framework Support

Feel free to raise a github issue if you wish to add TIM-VX for other frameworks.

Architecture Overview

TIM-VX Architecture

Technical documents

Get started

Build and Run

TIM-VX supports both bazel and cmake.


cmake

To build TIM-VX for x86 with prebuilt:

mkdir host_build
cd host_build
cmake ..
make -j8
make install

All install files (both headers and *.so) is located in : host_build/install

cmake options:

option name Summary Default
TIM_VX_ENABLE_TEST Enable unit test case for public APIs and ops OFF
TIM_VX_ENABLE_LAYOUT_INFER Build with tensor data layout inference support ON
TIM_VX_USE_EXTERNAL_OVXLIB Replace internal with a prebuilt libovxlib library OFF
OVXLIB_LIB full path to libovxlib.so include so name, required if TIM_VX_USE_EXTERNAL_OVXLIB=ON Not set
OVXLIB_INC ovxlib's include path, required if TIM_VX_USE_EXTERNAL_OVXLIB=ON Not set
EXTERNAL_VIV_SDK Give external vivante openvx driver libraries Not set
TIM_VX_BUILD_EXAMPLES Build example applications OFF
TIM_VX_ENABLE_40BIT Enable large memory (over 4G) support in NPU driver OFF
TIM_VX_ENABLE_PLATFORM Enable multi devices support OFF
TIM_VX_ENABLE_PLATFORM_LITE Enable lite multi-device support, only work when TIM_VX_ENABLE_PLATFORM=ON OFF
VIP_LITE_SDK full path to VIPLite sdk, required when TIM_VX_ENABLE_PLATFORM_LITE=ON Not set
TIM_VX_ENABLE_GRPC Enable gPRC support, only work when TIM_VX_ENABLE_PLATFORM=ON OFF
TIM_VX_DBG_ENABLE_TENSOR_HNDL Enable built-in tensor from handle ON
TIM_VX_ENABLE_TENSOR_CACHE Enable tensor cache for const tensor, check OpenSSL build notes OFF

Run unit test:

cd host_build/src/tim

export LD_LIBRARY_PATH=`pwd`/../../../prebuilt-sdk/x86_64_linux/lib:<path to libgtest_main.so>:$LD_LIBRARY_PATH
export VIVANTE_SDK_DIR=`pwd`/../../../prebuilt-sdk/x86_64_linux/
export VSIMULATOR_CONFIG=<hardware name should get from chip vendor>
# if you want to debug wit gdb, please set
export DISABLE_IDE_DEBUG=1
./unit_test

Build with local google test source

    cd <wksp_root>
    git clone --depth 1 -b release-1.10.0 git@github.com:google/googletest.git

    cd <root_tim_vx>/build/
    cmake ../ -DTIM_VX_ENABLE_TEST=ON -DFETCHCONTENT_SOURCE_DIR_GOOGLETEST=<wksp_root/googletest> <add other cmake define here>

Build for evk-boards

  1. prepare toolchain file follow cmake standard
  2. make sure cross build low-level driver with toolchain separately, we need the sdk from the low-level driver
  3. add -DEXTERNAL_VIV_SDK=<low-level-driver/out/sdk> to cmake definitions, also remember -DCMAKE_TOOLCHAIN_FILE=<Toolchain_Config>
  4. or for using a buildroot toolchain with extrnal VIV-SDK add:
    -DCONFIG=BUILDROOT -DCMAKE_SYSROOT=${CMAKE_SYSROOT} -DEXTERNAL_VIV_SDK=${BUILDROOT_SYSROOT}
    
  5. then make

Important notice for integration

If you want to build tim-vx as a static library, and link it to your shared library or application, please be carefull with the linker, "-Wl,--whole-archive" is required.

@see samples/lenet/CMakeLists.txt for reference

Bazel

Install bazel to get started.

TIM-VX needs to be compiled and linked against VeriSilicon OpenVX SDK which provides related header files and pre-compiled libraries. A default linux-x86_64 SDK is provided which contains the simulation environment on PC. Platform specific SDKs can be obtained from respective SoC vendors.

To build TIM-VX:

bazel build libtim-vx.so

To run sample LeNet:

# set VIVANTE_SDK_DIR for runtime compilation environment
export VIVANTE_SDK_DIR=`pwd`/prebuilt-sdk/x86_64_linux

bazel build //samples/lenet:lenet_asymu8_cc
bazel run //samples/lenet:lenet_asymu8_cc

Other

To build and run Tensorflow-Lite with TIM-VX, please see README

To build and run TVM with TIM-VX, please see TVM README

Reference board

Chip Vendor References Success Stories
i.MX 8M Plus NXP ML Guide, BSP SageMaker with 8MP
A311D Khadas - VIM3 A311D datasheet, BSP Paddle-lite demo
S905D3 Khadas - VIM3L S905D3 , BSP

Support

Create issue on github or email to ML_Support at verisilicon dot com