# LPAI Table of Contents. - [API Specializations](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#api-specializations) - [QNN LPAI Supported Operations](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-supported-operations) - [QNN LPAI Overview](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-overview) - [QNN LPAI Quick Start Guide](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-quick-start-guide) - - [QNN LPAI Setup & Configuration](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-setup-configuration) - - [Set up the environment variables](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-env-setup) - - [Prepare Json Configuration files](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-json-prepare) - - [QNN LPAI Backend Configuration Guide](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-configuration-guide) - [QNN LPAI Backend Configuration Parameters](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-configuration-parameters) - - [QNN LPAI Model Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id4) - - [Compile LPAI Graph on x86 Linux OS](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#compile-lpai-graph-on-x86-linux-os) - [Compile LPAI Graph on x86 Windows OS](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#compile-lpai-graph-on-x86-windows-os) - - [QNN LPAI Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id5) - - - [QNN LPAI Backend Simulation](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-sim-execution) - - [QNN LPAI Simulation on Linux x86](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-simulation-on-linux-x86) - [QNN LPAI Simulation on Windows x86](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-simulation-on-windows-x86) - [QNN LPAI Simulation on Hexagon](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#hexagon-sim-execution) - [QNN LPAI ARM Backend Type](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-fastrpc-backend-type) - [QNN LPAI Native aDSP Backend Type](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-direct-mode-backend-type) - [QNN LPAI Native aDSP Backend Type (Windows on ARM)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-direct-mode-backend-type-winarm) - - [QNN LPAI Profiling](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id13) - - [Profiling Initialization](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#profiling-initialization) - [Basic Profiling](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#basic-profiling) - [Detailed Profiling](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#detailed-profiling) - [Enable Profiling in qnn-net-run](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#enable-profiling-in-qnn-net-run) - [Visualize Profile Data with qnn-profile-viewer](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#visualize-profile-data-with-qnn-profile-viewer) - - [QNN LPAI Performance Infrastructure](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-performance-infrastructure) - - [Performance Modes](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#performance-modes) - [API Usage](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#api-usage) - [Performance Profile in qnn-net-run](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#performance-profile-in-qnn-net-run) - - [QNN LPAI Integration](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id16) - - - [QNN LPAI Memory Management](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-memory-management) - - [TCM Memory Support in LPAIBackendExtensions (ADSP Direct Mode)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-tcm-memory-support) - [Testing TCM Memory Support](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-tcm-testing) - [QNN LPAI Data Structures and Enumerations](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-lpai-data-structures-enums) - [QNN LPAI Batch-Multiple Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-lpai-batch-support) - - [QNN API Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id39) - - [Initialization](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#initialization) - [Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#execution) - [Deinitialization](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#deinitialization) - [QNN LPAI Shared Buffer Tutorial](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id42) - [QNN LPAI Graph Pause and Resume Tutorial](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#lpai-pause-resume) - [QNN LPAI Op Package](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id43) - [Troubleshooting for QNN LPAI Backends (x86 Simulator, ARM & aDSP)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-troubleshooting) - [Troubleshooting Table](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#troubleshooting-table) - [QNN LPAI Backend FAQs](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-backend-faqs) - [QNN LPAI Backend Glossary](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-backend-glossary) ## API Specializations This section contains information related to API specialization for the LPAI backend. All QNN LPAI backend specializations are available under the `/include/QNN/LPAI/` directory. The current version of the QNN LPAI backend API is: Warning doxygendefine: Cannot find define “QNN\_LPAI\_API\_VERSION\_MAJOR” in doxygen xml output for project “QairtCApi” from directory: /local/mnt/workspace/buildDir/snpe/pt/build/x86\_64-linux-clang/FirstParty/QNN/Doc/qairt-api-docs/c-api-docs/xml Warning doxygendefine: Cannot find define “QNN\_LPAI\_API\_VERSION\_MINOR” in doxygen xml output for project “QairtCApi” from directory: /local/mnt/workspace/buildDir/snpe/pt/build/x86\_64-linux-clang/FirstParty/QNN/Doc/qairt-api-docs/c-api-docs/xml Warning doxygendefine: Cannot find define “QNN\_LPAI\_API\_VERSION\_PATCH” in doxygen xml output for project “QairtCApi” from directory: /local/mnt/workspace/buildDir/snpe/pt/build/x86\_64-linux-clang/FirstParty/QNN/Doc/qairt-api-docs/c-api-docs/xml ## QNN LPAI Supported Operations QNN LPAI supports running quantized 8-bit and quantized 16-bit networks on supported Qualcomm chipsets. A list of operations supported by the QNN LPAI runtime can be found under the Backend Support LPAI column in [Supported Operations](https://docs.qualcomm.com/doc/80-63442-10/topic/SupportedOps.html#supported-operations). ## QNN LPAI Overview LPAI (Low Power AI) is a programmable ML engine optimized for low-area, low-power applications. It is optimized for deeply embedded use cases such as: - Always-on voice use cases on mobile, XR or IoT platforms. - Voice and music use cases on IoT platforms - Voice AI use cases such as Automatic Speech Recognition (ASR), Speech Caption, etc. - Always-on camera use cases on mobile, XR or IoT platforms - Qualcomm Sensor hubs **Architecture Overview** The LPAI backend targets the **eNPU (embedded Neural Processing Unit)** on supported Qualcomm SoCs. The eNPU runs inside the **aDSP (audio DSP)** process domain and is typically configured as one or two cores. Two execution modes are available: - **ARM FastRPC** (standard): The host CPU communicates with the aDSP over FastRPC (IPC). Straightforward to deploy on Android; higher latency due to IPC overhead. - **Native aDSP Direct Mode**: Code runs directly in the DSP process domain with no IPC. Lowest latency; suitable for audio and sensor pipeline applications integrated into the DSP PD. Models must be **quantized** (8-bit or 16-bit) and compiled offline into a context binary before execution. The eNPU supports **island execution** — a low-power, always-on operating mode where the DSP runs independently of the main application processor. Models executed in island mode have additional memory and API constraints (see [QNN LPAI Op Package](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-op-package)). This document provides a user-friendly guide to using the QNN LPAI backend for model generation, execution, result analysis and profiling. ## QNN LPAI Quick Start Guide Follow these steps to get started quickly: 1. [Setup the environment variables (QNN\_SDK\_ROOT, PATH, LD\_LIBRARY\_PATH)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-env-setup) 2. [Prepare the JSON configuration file](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-json-prepare) 3. [QNN LPAI Model Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-model-generation) 4. [Transfer model and input files to the target device](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-prepare-test-platform) 5. [QNN LPAI Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-execution) 6. [QNN LPAI Profiling](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-profiling) 7. [Troubleshooting for QNN LPAI Backends (x86 Simulator, ARM & aDSP)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-troubleshooting) ## QNN LPAI Setup & Configuration **Set up the environment variables** > > > Set up your environment with the required SDK paths and configuration files. Use the following variables: > > - This includes setting paths to toolchains, libraries, and runtime binaries. > - Key environment variables: > > - `QNN_SDK_ROOT`: Root directory of the QNN SDK installation. > - `PATH`: Must include paths to QNN tools and binaries (e.g., `$QNN_SDK_ROOT/bin`). > - `LD_LIBRARY_PATH` (Linux only): Must include paths to required shared libraries (e.g., `$QNN_SDK_ROOT/lib`). > > > > Important > > > Ensure the following environment variables are set before using offline tools: > > > **Linux Example**: > > > export QNN_SDK_ROOT=/path/to/qnn_sdk > export PATH=$QNN_SDK_ROOT/bin/x86_64-linux-clang:$PATH > export LD_LIBRARY_PATH=$QNN_SDK_ROOT/lib/x86_64-linux-clang:$LD_LIBRARY_PATH > Copy to clipboard > > > **Windows Example (Command Prompt)**: > > > set QNN_SDK_ROOT=C:\path\to\qnn_sdk > set PATH=%QNN_SDK_ROOT%\bin\x86_64-windows-msvc;%PATH% > set PATH=%QNN_SDK_ROOT%\lib\x86_64-windows-msvc;%PATH% > Copy to clipboard **Prepare the JSON configuration file** > > > The configuration file defines both **model generation** and **execution parameters** for a specific LPAI hardware version. > > - The JSON file consists of two sections: > > - **Model generation**: Specifies how the model should be compiled for the target LPAI version. > - **Model execution**: Defines runtime behavior, including memory allocation and device-specific settings. > - Different Snapdragon platforms may support different LPAI versions. Refer to the compatibility table at Supported Snapdragon Devices. > > > > Create a configuration JSON file with model generation and execution parameters. Example: > > > { > "lpai_backend": { > "target_env": "adsp", > "enable_hw_ver": "v6", > "platform_config_file": "/path/to/platform_config.json" > }, > "lpai_graph": { > "prepare": { > "enable_core_selection": "0,1" > } > } > } > Copy to clipboard > > > Note > > > `platform_config_file` and `enable_core_selection` are optional. > Omit them to use built-in defaults. > > - For detailed instructions, see the [QNN LPAI Backend Configuration Guide](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-backend-configuration-guide). ## QNN LPAI Backend Configuration Guide - [Overview](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#overview) - [Configuration Schema](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#configuration-schema) - [lpai_backend](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#lpai-backend) - [lpai_graph](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#lpai-graph) - [lpai_profile (Optional)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#lpai-profile-optional) - [lpai_debug (Optional)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#lpai-debug-optional) - [lpai_private (Optional)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#lpai-private-optional) - [QNN LPAI Backend Configuration Parameters](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-backend-configuration-parameters) - [Fps and ftrt_ratio information](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#fps-and-ftrt-ratio-information) - [Realtime vs Non-Realtime client](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#realtime-vs-non-realtime-client) - [eNPU Performance Configuration](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#enpu-performance-configuration) - [Core Selection & Affinity](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#core-selection-affinity) - [Enable Core Selection During Preparation](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#enable-core-selection-during-preparation) - [Purpose](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#purpose) - [Examples](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#examples) - [Runtime Layout Control in LPAI](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#runtime-layout-control-in-lpai) - [Purpose](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id3) - [Why It Matters](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#why-it-matters) - [Recommended Usage](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#recommended-usage) - [Limitations](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#limitations) - [Summary](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#summary) - [Full JSON Schema](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#full-json-schema) - [Full JSON Example](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#full-json-example) - [Best Practices](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#best-practices) ### [Overview](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) This document outlines the structure and usage of LPAI backend configuration files employed by QNN tools such as `qnn-net-run` and `qnn-context-binary-generator`. These JSON-formatted files enable fine-grained control over model preparation, runtime behavior, debugging, profiling, and internal backend features. There are two primary JSON configuration files: 1. **Backend Extension Configuration File** Specifies the path to the LPAI backend extension shared library and the path to the LPAI backend configuration file. Example usage: `--config_file ` Example format: { "backend_extensions" : { "shared_library_path" : "path_to_Lpai_extension_shared_library", "config_file_path" : "path_to_Lpai_extension_config_file" } } Copy to clipboard 2. **LPAI Backend Configuration File** Defines all configurable parameters for model generation and execution. This file is parsed by the LPAI backend extension library. ### [Configuration Schema](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) The configuration is organized into the following sections: - `lpai_backend`: Global backend settings. - `lpai_graph` : Graph preparation and execution parameters. - `lpai_profile`: Profiling options (optional). - `lpai_debug` : Debug options (optional). - `lpai_private`: Internal/private backend options (optional). Each section and its parameters are described below. #### [lpai_backend](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) - `target_env` (string): Target environment for model execution. **Options**: `arm`, `adsp`, `x86` **Default**: `adsp` - `enable_hw_ver` (string): Hardware version of target refer to Supported Snapdragon Devices. **Options**: `v5`, `v5_1`, `v6` **Default**: `v6` - `platform_config_file` (string): Path to a platform configuration file used to provide platform-specific settings to the backend. When specified, the backend loads additional platform parameters from this file, overriding built-in defaults where applicable. **Default**: Not set (optional) #### [lpai_graph](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) - `prepare` > > > Used by `qnn-context-binary-generator` during model preparation (offline compilation). > > - `enable_core_selection` (string): [Comma-separated list of eNPU core indices to enable during model preparation.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-enable-core-selection) Example: `"0,1"`. Default: all available cores. - `execute` > > > Used by `qnn-net-run` during runtime execution. > > - `fps` (integer): [Target frames per second.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-configuration-parameters) Default: `1` > - `ftrt_ratio` (integer): [Frame-to-real-time ratio.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-configuration-parameters) Default: `10` > - `client_type` (string): [Type of workload.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-real-time) Options: `real_time`, `non_real_time`. Default: `real_time` > - `affinity` (string): [Core affinity policy.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-core-selection) Options: `soft`, `hard`. Default: `soft` > - `core_selection` (integer): [Specific core number.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-core-selection) Default: `0` > - `mem_type` (string): [Memory type for I/O tensor buffers and model binary.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-tcm-memory-support) Options: `ddr`, `tcm` (ADSP Direct Mode only). Default: `ddr`. > - `frame_rate` (integer): [eNPU target frame rate.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-enpu-perf-cfg) Default: `1` > - `enpu_clock_scale` (integer): [eNPU clock scale factor.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-enpu-perf-cfg) Default: `1` > - `enpu_floor_clock_level` (integer): [eNPU floor clock level.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-enpu-perf-cfg) Default: `0` > - `enpu_bw_scale` (integer): [eNPU bandwidth scale factor.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-enpu-perf-cfg) Default: `1` > - `enpu_floor_bw` (integer): [eNPU floor bandwidth in bytes.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-enpu-perf-cfg) Default: `0` #### [lpai_profile (Optional)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) - `level` (string): Profiling level: `basic`, `detailed`. Default: `basic` [Lpai Profiling](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-profiling) #### [lpai_debug (Optional)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) - `force_nhwc` (bool): [Enforce NHWC tensor layout.](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-debug-force-nhwc) Default: `false` - `enable_cu_r_shift` (bool): Enable the compute-unit right-shift optimization during graph compilation. Default: `false` - `enable_framer_opt` (bool): Enable the framer optimization during graph compilation. Default: `false` - `search_elem_bcast_layouts` (bool): Search for element-wise broadcast layouts during graph compilation. Default: `false` #### [lpai_private (Optional)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) - `disable_async` (bool): When set to `true`, disables asynchronous execution in the LPAI backend, forcing all operations to run synchronously. **Default**: `false` ### [QNN LPAI Backend Configuration Parameters](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) #### [Fps and ftrt_ratio information](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) These parameters define how a client configures its processing behavior for eNPU hardware. - - fps (Frames Per Second) - - Specifies how frequently inference must be completed. - For example, fps = 10 means the system must process one frame every 100 milliseconds (i.e., 1000 ms / 10). - This sets the overall time budget for each frame, including pre-processing, inference, and post-processing. - - ftrt_ratio (Factor to Real-Time Ratio) - - Determines the hardware configuration to meet the latency requirement for inference. - If pre- and post-processing take up most of the frame time (e.g., 80 ms out of 100 ms), only 20 ms remain for inference. - To ensure inference completes within this reduced time window, the eNPU must be boosted. - The value is interpreted as: **clock multiplier = ftrt\_ratio / 10.0**. For example, `ftrt_ratio = 50` applies a multiplication factor of 5.0 (50 ÷ 10) to the base clock frequency. - - Default Values - - fps = 1 (1 frame per second, allowing 1000 ms per frame) - ftrt_ratio = 10 (moderate clock scaling factor) These defaults imply a relaxed processing schedule and a balanced performance-power tradeoff. #### [Realtime vs Non-Realtime client](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) - Real-time: Indicates that the model is intended for real-time use cases, where a specific performance threshold must be met. If the required performance cannot be achieved, the finalize function will return an error. - Non-real-time: Refers to models without strict performance requirements. In these cases, LPAI will make a best-effort attempt to accommodate the workload, and finalize will not fail due to performance limitations. #### [eNPU Performance Configuration](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) These parameters provide fine-grained, eNPU-specific control over clock and bandwidth voting, serving as an alternative to [fps / ftrt\_ratio](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-fps-ftrt-ratio). The [fps / ftrt\_ratio](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-fps-ftrt-ratio) and [eNpu Performance Config](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-enpu-perf-cfg) settings are mutually exclusive. If both are specified, the eNPU Performance Configuration takes precedence. Warning Device clock and bandwidth are dynamically managed at runtime to ensure target performance. Use these configurations with caution. Direct manipulation of clock and power states can lead to unstable behavior, higher power consumption, or thermal issues in production. Restrict use to profiling or when increased eNPU clock and bandwidth votes are required to meet performance targets. - - `frame_rate` - - Target frame rate used for the eNPU clock vote (frames per second). - Similar to `fps` but scoped to eNPU-specific voting. - Default: `1.0` - - `enpu_clock_scale` - - Multiplicative scale factor applied to the eNPU clock vote. - A value of `1` keeps the clock at its base level; higher values boost the eNPU clock. - Default: `1.0` - - `enpu_floor_clock_level` - - Minimum clock level for the eNPU. Prevents the clock from being voted below this level even under light load. - Default: `0` (no floor enforced) - - `enpu_bw_scale` - - Multiplicative scale factor applied to the eNPU bandwidth vote. - Default: `1.0` - - `enpu_floor_bw` - - Minimum DDR bandwidth in bytes for the eNPU. Prevents the bandwidth vote from dropping below this value. Set to 4294967295 (UINT32\_MAX) if you wish to guarantee that bandwidth is voted to its highest possible value. - Default: `0` (no floor enforced) **Parameter Influence** | Parameter | Controls | Typical Impact | Typical Values | | --- | --- | --- | --- | | `frame_rate` | Required throughput | Higher FPS increases clock and bandwidth requirements | 1.0, 2.5, 50.0 [\*](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id1)will depend on the application | | `enpu_clock_scale` | Clock boost | Higher values improve latency but increase power | 1.0, 2.5, 100.0 | | `enpu_floor_clock_level` | Minimum performance level | A floor level to guarantee a minimum on the dynamically computed clock-level | 0-5 (0-no floor enforced) | | `enpu_bw_scale` | Bandwidth boost | Increases DDR/interconnect bandwidth votes | 1.0, 3.5 | | `enpu_floor_bw` | Minimum bandwidth guarantee | A floor level to guarantee a minimum on the dynamically computed bandwidth | 0 (no floor enforced), 100, 4294967295 (UINT32\_MAX) | **Equivalent ftrt\_ratio Mapping** | ftrt\_ratio Bits | Maps To | | --- | --- | | `[11:0]` | `enpu_clock_scale = value / 10` | | `[14:12]` | `enpu_floor_clock_level = LOWSVS(1)/SVS(2)/SVS_L1(3)/NOMINAL(4)/TURBO(5)` | | `[15]` | Maximum bandwidth (`enpu_bw_scale`, `enpu_floor_bw`) | #### [Core Selection & Affinity](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) Clients can configure **core selection** and **affinity settings** for the eAI to control how their model’s offloaded operations (Ops) are assigned to processing cores. If no settings are provided: - **Core Selection** defaults to `0x00` (no specific preference — any available core may be selected). - **Affinity** defaults to **soft affinity**. ##### Core Selection - `coreSelection` is a **bitmask** that specifies which core(s) are eligible for selection. - Each bit represents a core: - `0x01` → selects **core 0** - `0x02` → selects **core 1** - `0x00` → no specific preference; any available core may be selected Important - Mixed core selection (e.g., `0x03` to select both core 0 and core 1) is **not yet supported**. ##### Platform-Specific Guidance For platforms with **only one processing core**, users should configure: - `coreSelection = 0x00` (no specific preference), or - `coreSelection = 0x01` (explicitly select core 0) This ensures compatibility and avoids undefined behavior due to unsupported multi-core selection. Important - The API does **not expose core characteristics** (e.g., whether a core is “big” or “small”). - Users should consult **platform documentation** to determine core capabilities and make informed decisions about core selection and affinity strategy. ##### Affinity Strategy - **Hard Affinity**: Forces Ops to run only on the selected core. - **Soft Affinity**: Prefers the selected core but allows fallback to another if the preferred is busy. ##### Guidance Based on Core Behavior | Scenario | Recommended coreSelection | Affinity Type | Rationale | | --- | --- | --- | --- | | Heavy compute workloads
(e.g., large convNets) | `0x02` (Core 1) | Hard or Soft | Core 1 is typically a big core, offering better performance | | Audio use cases | `0x01` (Core 0) | Soft | Core 0 (small core) is sufficient and more power-efficient | | Camera use cases | `0x02` (Core 1) | Soft | Core 1 provides faster inference for image processing | | Shared workloads
(audio + camera) | `0x00` (Any) | Soft | Allows dynamic load balancing across cores | | Power-sensitive applications | `0x01` (Core 0) | Soft | Core 0 consumes less power | | Performance-critical apps | `0x02` (Core 1) | Hard | Ensures consistent execution on the high-performance core | ##### System-Level Considerations - Core affinity should be tuned based on: - System concurrency - Workload characteristics - KPI targets - Power budget - Profiling results - **Core shutdown is not required**: Idle cores are automatically **power collapsed**, ensuring efficient power management. ### [Enable Core Selection During Preparation](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) The `enable_core_selection` parameter, specified under `lpai_graph.prepare`, controls which eNPU cores are considered during offline model preparation (compilation). #### [Purpose](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) When generating a context binary with `qnn-context-binary-generator`, the backend can target specific eNPU cores. `enable_core_selection` accepts a **comma-separated string** of zero-based core indices (e.g., `"0"`, `"1"`, `"0,1"`). This is distinct from the execution-time `core_selection` parameter (under `lpai_graph.execute`), which is a bitmask integer used at runtime by `qnn-net-run`. #### [Examples](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) - `"0"` — prepare for core 0 only. - `"1"` — prepare for core 1 only. - `"0,1"` — prepare for both core 0 and core 1. Note The available core indices depend on the target platform. Refer to platform documentation for valid core numbers. ### [Runtime Layout Control in LPAI](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) #### [Purpose](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) The `force_nhwc` option is a runtime configuration setting used in Qualcomm’s LPAI (Low Power AI) backend to enforce NHWC tensor layout during model execution. Its primary role is to help avoid automatic layout transformations—specifically `TRANSPOSE` operations—around convolutional layers, which can negatively impact performance and profiling clarity. #### [Why It Matters](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) When executing models on the eNPU, layout transformations often appear around operations like `Conv2D`, especially at graph boundaries. These transformations are inserted to reconcile differences between the model’s tensor layout (e.g., NHWC) and the eNPU’s internal hardware-native layout, which is typically blocked or tiled. Even if a model is converted with NHWC input/output layouts and no output layout is explicitly forced, the runtime may still insert `TRANSPOSE` operations unless `force_nhwc` is enabled. These transformations can dominate execution time on the DSP and obscure the performance of the actual accelerated operation. #### [Recommended Usage](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) To minimize or eliminate layout transformations at graph boundaries: - Set input and output tensor layouts to NHWC during model conversion. - Enable `force_nhwc` in the runtime configuration. This instructs the runtime to preserve NHWC layout and avoid inserting layout transforms. - Avoid forcing output layout during conversion, which can trigger post-processing transforms. #### [Limitations](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) - If `force_nhwc` is not enabled, layout transforms will likely appear even if the graph is NHWC. - For single operations at graph boundaries, layout transforms may still occur due to the eNPU’s internal layout requirements. - To fully avoid layout transforms, it is often necessary to chain multiple eNPU-compatible operations, allowing the internal layout to be reused across ops without conversion. #### [Summary](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) `force_nhwc` is a critical setting for developers aiming to optimize LPAI model execution and profiling. It ensures that NHWC layouts are respected at runtime, reducing overhead and improving clarity in performance analysis. However, due to hardware constraints, some layout transforms may still be unavoidable unless multiple operations are chained together. ### [Full JSON Schema](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) Below is a complete schema of the LPAI backend configuration file with all supported parameters: { "lpai_backend": { // Selection of targets [options: arm/adsp/x86] [default: adsp] (Simulator or target) // Used by qnn-context-binary-generator during offline generation "target_env": "adsp", // Corresponds to the LPAI hardware version [options: v5/v5_1/v6] [default: v6] // Used by qnn-context-binary-generator during offline generation "enable_hw_ver": "v6", // Path to a platform configuration file for platform-specific settings [optional] // Used by qnn-context-binary-generator and qnn-net-run "platform_config_file": {"type": "string"} }, "lpai_graph": { "prepare": { // Comma-separated list of eNPU core indices to enable during model preparation [optional] // Example: "0,1" enables both core 0 and core 1 // Used by qnn-context-binary-generator during offline generation "enable_core_selection": {"type": "string"} }, "execute": { // Specify the fps rate number, used for clock voting [options: number] [default: 1] // Used by qnn-net-run during execution "fps": {"type": "integer"}, // Specify the ftrt_ratio number [options: number] [default: 10] // Used by qnn-net-run during execution "ftrt_ratio": {"type": "integer"}, // Definition of client type [options: real_time/non_real_time] [default: real_time] // Used by qnn-net-run during execution "client_type": {"type": "string"}, // Definition of affinity type [options: soft/hard] [default: soft] // Used by qnn-net-run during execution "affinity": {"type": "string"}, // Specify the core bitmask (0x01 = core 0, 0x02 = core 1, 0x00 = any available core) [default: 0] // Used by qnn-net-run during execution "core_selection": {"type": "integer"}, // Memory type for I/O tensor buffers and model binary [options: ddr/tcm] [default: ddr] // "tcm" is only supported in ADSP Direct Mode; see TCM Memory Support in the Memory Management document // Used by qnn-net-run during execution "mem_type": {"type": "string"}, // eNPU target frame rate for clock voting [options: number] [default: 1] // Used by qnn-net-run during execution "frame_rate": {"type": "integer"}, // eNPU clock scale factor [options: number] [default: 1] // Used by qnn-net-run during execution "enpu_clock_scale": {"type": "integer"}, // eNPU floor clock level [options: number] [default: 0] // Used by qnn-net-run during execution "enpu_floor_clock_level": {"type": "integer"}, // eNPU bandwidth scale factor [options: number] [default: 1] // Used by qnn-net-run during execution "enpu_bw_scale": {"type": "integer"}, // eNPU floor bandwidth in bytes [options: number] [default: 0] // Used by qnn-net-run during execution "enpu_floor_bw": {"type": "integer"} } }, "lpai_private": { // Disable asynchronous execution; forces synchronous operation [default: false] "disable_async": {"type": "boolean"} } } Copy to clipboard #### [Full JSON Example](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) Below is a complete example of the LPAI backend configuration file with all supported parameters: { "lpai_backend": { "target_env": "adsp", "enable_hw_ver": "v6", "platform_config_file": "/path/to/platform_config" }, "lpai_graph": { "prepare": { "enable_core_selection": "0,1" }, "execute": { "fps": 1, "ftrt_ratio": 10, "client_type": "real_time", "affinity": "soft", "mem_type": "tcm", "core_selection": 0, "frame_rate": 1, "enpu_clock_scale": 1, "enpu_floor_clock_level": 0, "enpu_bw_scale": 1, "enpu_floor_bw": 0 } }, "lpai_private": { "disable_async": false } } Copy to clipboard ### [Best Practices](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#contents) - **Minimal Changes**: Use default values unless specific tuning is required. - **Validation**: Ensure all values conform to expected types and allowed options. - **Version Compatibility**: Refer to the Supported Snapdragon Devices for supported LPAI versions. ## QNN LPAI Model Generation Model generation uses three QNN tools in sequence: | # | Tool | Purpose | Output | | --- | --- | --- | --- | | 1 | QNN Converters | Convert and quantize a model (ONNX, TF, etc.) to QNN IR. | `.dlc` / `.cpp` | | 2 | qnn-model-lib-generator | Compile the QNN IR into a loadable shared library. | `libQnnModel.so` | | 3 | qnn-context-binary-generator | Compile the model library into an offline context binary
optimized for the target LPAI hardware version. | `*.serialized.bin` | Important The LPAI backend **requires quantized QNN models**. Unquantized models are not supported. For supported operations and quantization requirements, refer to [Supported Operations](https://docs.qualcomm.com/doc/80-63442-10/topic/SupportedOps.html#supported-operations). The `*.serialized.bin` produced in step 3 is the file deployed to the device. It encodes the graph, quantization parameters, and hardware-specific optimizations for the chosen `enable_hw_ver`. [Offline LPAI Model Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-offline-model-generation) illustrates the LPAI offline model generation. **Offline LPAI Model Generation** ![Offline LPAI Model Generation](data:image/png;base64,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) ## Quantization Method Comparison | Method | Command Line | Purpose | Key Options & Descriptions | | --- | --- | --- | --- | | CPU-Based Quantization | `qnn-onnx-converter --target_backend LPAI --input_network model.onnx --input_list ` | Generate activation distribution and quantize tensors using CPU. |

  • --use_per_channel_quantization: Enables per-channel quantization for conv-based weights.


  • --use_per_row_quantization: Enables per-row quantization for Matmul/FullyConnected weights.


  • --act_quantizer_schema symmetric: Sets symmetric quantization for all activations (default: asymmetric).


  • --param_quantizer_schema symmetric: Sets symmetric quantization for all parameters (default: asymmetric).


  • --param_quantizer_calibration min-max: Calibration method for parameters (default: min-max).


  • --act_quantizer_calibration min-max: Calibration method for activations (default: min-max).


  • --act_bitwidth 8: Bitwidth for activations (default: 8-bit).


  • --weights_bitwidth 8: Bitwidth for weights (default: 8-bit).


  • --bias_bitwidth 32: Bitwidth for bias tensors (recommended: 32-bit; default is 8-bit, but LPAI hardware typically requires 32-bit bias for numerical accuracy).


  • --use_dynamic_16_bit_weights: Keeps matmul/FC weights in 16-bit if specified.


  • --disable_batchnorm_folding: (Optimization) Disables batch normalization folding.


  • --disable_relu_squashing: (Optimization) Disables relu squashing.


  • --preserve_io layout: Ensures graph input/output layout is the same as the original model.


| | JSON-Based Quantization (e.g., AIMET) | `qnn-onnx-converter --target_backend LPAI --input_network model.onnx --quantization_overrides --float_fallback` | Use external tool (e.g., AIMET) to define quantization via JSON overrides. |

  • --act_quantizer_schema: Sets quantization schema for activations (default: asymmetric).


  • --param_quantizer_schema: Sets quantization schema for parameters (default: asymmetric).


  • --bias_bitwidth 32: Bitwidth for bias tensors (recommended: 32-bit; default is 8-bit, but LPAI hardware typically requires 32-bit bias for numerical accuracy).


  • --keep_weights_quantized: Retains weight quantization info even if output is float.


  • --disable_batchnorm_folding: (Optimization) Disables batch normalization folding.


  • --disable_relu_squashing: (Optimization) Disables relu squashing.


  • --preserve_io layout: Ensures graph input/output layout is the same as the original model.


| Note `--use_dynamic_16_bit_weights` is **enabled by default** when using `--target_backend LPAI`. ## Recommendations | Scenario | Recommended Workflow | Rationale | | --- | --- | --- | | Quick prototyping or baseline quantization | CPU-Based Quantization | Fast setup with default options; no need for external tools. | | Fine-grained control over quantization behavior | JSON-Based Quantization | Allows detailed overrides via JSON (e.g., AIMET), ideal for achieving better quantization accuracy with advanced quantization algorithms. | | Working with pre-calibrated models or external calibration tools | JSON-Based Quantization | Integrates well with external calibration data and overrides. | | Accuracy-sensitive models (speech, ASR) | JSON-Based Quantization with per-row weights | Per-row quantization on FC/Matmul layers reduces dequantization error for weight-sensitive layers. | | Memory-constrained deployment | CPU-Based, 8-bit activations + weights | Smallest binary size; 8-bit is the primary hardware-optimized path on LPAI. | ## Quantization Tips - Use `--use_per_channel_quantization` for convolution layers to improve accuracy. - Use `--use_per_row_quantization` for Matmul/FC layers to reduce quantization error. - Prefer symmetric quantization (`--act_quantizer_schema symmetric`) for hardware-friendly deployment on LPAI. - Use `--keep_weights_quantized` together with `--float_fallback` to ensure quantization overrides from an external tool (e.g., AIMET) are preserved in the final model. - If quantized model accuracy is significantly lower than float, check that your calibration dataset is representative of the real input distribution and consider switching to JSON-Based Quantization for finer control. - LPAI does **not** support unquantized (float) execution. Models must be fully quantized before passing to `qnn-context-binary-generator`. ## Compile LPAI Graph on x86 Linux OS Prepare a `lpaiParams.conf` JSON file with appropriate parameters to generate the model for the target hardware. EXAMPLE of `lpaiParams.conf` for v6 hardware: { "lpai_backend": { "target_env": "x86", "enable_hw_ver": "v6", "platform_config_file": "/path/to/platform_config.json" }, "lpai_graph": { "prepare": { "enable_core_selection": "0,1" } } } Copy to clipboard Note `platform_config_file` and `enable_core_selection` are optional. Omit them to use built-in defaults. EXAMPLE of `config.json` file: { "backend_extensions": { "shared_library_path": "${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpaiNetRunExtensions.so", "config_file_path": "./lpaiParams.conf" } } Copy to clipboard Use context binary generator to generate offline LPAI model. The qnn-context-binary-generator utility is backend-agnostic, meaning it can only utilize generic QNN APIs. The backend extension feature allows for the use of backend-specific APIs, such as custom configurations. More documentation on context binary generator can be found under qnn-context-binary-generator. Please note that the scope of QNN backend extensions is limited to qnn-context-binary-generator and qnn-net-run. LPAI Backend Extensions serve as an interface to offer custom options to the LPAI Backend. To enable hardware versions, it is necessary to provide an extension shared library `libQnnLpaiNetRunExtensions.so` and a configuration file, if required. To use backend extension-related parameters with qnn-net-run and qnn-context-binary-generator, use the `--config_file` argument and provide the path to the JSON file. $ cd ${QNN_SDK_ROOT}/examples/QNN/converter/models $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${QNN_SDK_ROOT}/lib/x86_64-linux-clang $ ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-context-binary-generator \ --backend /libQnnLpai.so \ --model \ --log_level verbose \ --binary_file \ --config_file Copy to clipboard To configure LPAI JSON configuration refer to [QNN LPAI Backend Configuration Guide](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-configuration-guide). ## Compile LPAI Graph on x86 Windows OS Note The `lpaiParams.conf` should be created in the same way as for Linux (see Compile LPAI Graph on x86 Linux). Optionally include `platform_config_file` and `enable_core_selection`: { "lpai_backend": { "target_env": "x86", "enable_hw_ver": "v6", "platform_config_file": "C:\\path\\to\\platform_config.json" }, "lpai_graph": { "prepare": { "enable_core_selection": "0,1" } } } Copy to clipboard EXAMPLE of `config.json` file: { "backend_extensions": { "shared_library_path": "${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpaiNetRunExtensions.dll", "config_file_path": "./lpaiParams.conf" } } Copy to clipboard Use the context binary generator to generate an offline LPAI model. More documentation on the context binary generator can be found under qnn-context-binary-generator. **Generate the Context Binary:** cd ${QNN_SDK_ROOT}/examples/QNN/converter/models $env:PATH="${QNN_SDK_ROOT}\lib\x86_64-windows-msvc;${QNN_SDK_ROOT}\bin\x86_64-windows-msvc;$env:PATH" qnn-context-binary-generator.exe ` --backend ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpai.dll ` --model ${QNN_SDK_ROOT}/examples/Models/InceptionV3/model_libs/x86_64-windows-msvc/QnnModel.dll ` --config_file ` --binary_file qnn_model_8bit_quantized.serialized Copy to clipboard ## QNN LPAI Execution **Transfer model and input files to the target device** > > > Set up a dedicated test directory on the target device or x86 host (for simulation). Copy the following into this directory: > > - The compiled model binary > - Input data files > - A predefined input_list file (for QNN-NET-RUN) > > > > Ensure that all required QNN and LPAI runtime components are included based on the target platform > [Execute model using qnn-net-run](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-fastrpc-backend-type) to learn more about necessary components for every configuration. **Execute the model using qnn-net-run on test platform (simulator or target device)** > > > Choose the execution backend based on your target environment: > > > > > > > | Backend | Ref | Host setup | When to use | > | --- | --- | --- | --- | > | x86 Simulator | [QNN LPAI Backend Simulation](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-sim-execution) | Linux or Windows x86 PC | Development, CI, no hardware | > | ARM FastRPC (Android) | [QNN LPAI ARM Backend Type](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-fastrpc-backend-type) | aarch64-android | Standard Android deployment | > | Native aDSP Direct | [QNN LPAI Native aDSP Backend Type](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-direct-mode-backend-type) | aarch64-android | Lowest latency, DSP PD apps | > | Native aDSP WoS | [QNN LPAI Native aDSP Backend Type for Windows on Arm](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-direct-mode-backend-type-winarm) | aarch64-windows-msvc | Windows on Snapdragon | [LPAI Simulation behavior](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-sim-execution) illustrates the LPAI simulation on x86 Linux/Windows OS and Hexagon. ## QNN LPAI Backend Simulation The LPAI backend compiled for x86 supports both offline model generation and direct execution using a software simulator. This allows you to develop, validate, and debug models on a Linux or Windows development machine **without any physical Qualcomm hardware**. **When to use simulation:** - Early-stage model validation before deploying to a device - CI/CD pipeline testing where hardware is not available - Debugging model correctness issues in a controlled environment **Limitations of simulation:** - Performance (latency, throughput) does not reflect real hardware - Island mode is not supported in x86 simulation - TCM memory is not available; all allocations use DDR Refer to the offline model generation page to prepare configuration files: [Offline LPAI Model Generation](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-offline-model-generation). **Required libraries** — ensure these are in `LD_LIBRARY_PATH` (Linux) or `PATH` (Windows): | Library | Purpose | | --- | --- | | `libQnnLpai.so` / `QnnLpai.dll` | LPAI backend | | `libQnnLpaiNetRunExtensions.so` / `QnnLpaiNetRunExtensions.dll` | Backend extensions (reads config file) | | `libQnnLpaiPrepare_${HW_VER}.so` / `QnnLpaiPrepare_${HW_VER}.dll` | Required for offline model generation (context binary generator only) | | `libQnnLpaiSim_${HW_VER}.so` / `QnnLpaiSim_${HW_VER}.dll` | Simulation runtime (required for `qnn-net-run` on x86) | ## QNN LPAI Simulation on Linux x86 **LPAI x86 Linux Simulation** ![LPAI x86 Linux Simulation](data:image/png;base64,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) Note If full paths are not given to `qnn-net-run`, all libraries must be added to `LD_LIBRARY_PATH` and be discoverable by the system library loader. **From Quantized model:** $ cd ${QNN_SDK_ROOT}/examples/QNN/converter/models $ ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-net-run \ --backend ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpai.so \ --model ${QNN_SDK_ROOT}/examples/QNN/example_libs/x86_64-linux-clang/libQnnModel.so \ --input_list ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_list_float.txt \ --config_file /path/to/config.json Copy to clipboard **From Serialized buffer:** $ cd ${QNN_SDK_ROOT}/examples/QNN/converter/models $ ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-net-run \ --backend ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpai.so \ --retrieve_context ${QNN_SDK_ROOT}/examples/QNN/converter/models/qnn_model_8bit_quantized.serialized.bin \ --input_list ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_list_float.txt \ --config_file /path/to/config.json Copy to clipboard Tip Add the necessary libraries to your `LD_LIBRARY_PATH`: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${QNN_SDK_ROOT}/lib/x86_64-linux-clang Copy to clipboard ## QNN LPAI Simulation on Windows x86 **LPAI x86 Windows Simulation** ![LPAI x86 Windows Simulation](data:image/png;base64,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) Follow these steps to run the LPAI Simulation Backend on a Windows x86 system: Note If full paths are not given to `qnn-net-run.exe`, all libraries must be added to `PATH` and be discoverable by the system library loader. **From Quantized model:** $ cd ${QNN_SDK_ROOT}/examples/QNN/converter/models $ ${QNN_SDK_ROOT}/bin/x86_64-windows-msvc/qnn-net-run.exe \ --backend ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpai.dll \ --model ${QNN_SDK_ROOT}/examples/QNN/example_libs/x86_64-windows-msvc/QnnModel.dll \ --input_list ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_list_float.txt \ --config_file /path/to/config.json Copy to clipboard **From Serialized buffer:** $ cd ${QNN_SDK_ROOT}/examples/QNN/converter/models $ ${QNN_SDK_ROOT}/bin/x86_64-windows-msvc/qnn-net-run.exe \ --backend ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpai.dll \ --retrieve_context ${QNN_SDK_ROOT}/examples/QNN/converter/models/qnn_model_8bit_quantized.serialized.bin \ --input_list ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_list_float.txt \ --config_file /path/to/config.json Copy to clipboard Important Ensure that the `QNN_SDK_ROOT` environment variable is set correctly: set QNN_SDK_ROOT=C:\path\to\qnn_sdk Copy to clipboard Tip Add the necessary libraries to your `PATH`: set PATH=%PATH%;%QNN_SDK_ROOT%\lib\x86_64-windows-msvc Copy to clipboard Outputs from the run will be located at the default ./output directory. ## Hexagon Simulator Execution Guide (Advanced – LPAI v6) This section provides a **detailed, customer‑focused guide** for running, testing, debugging, and validating the **hexagon\_sim application** using the `run_hexagon_sim.sh` script. The guide reflects the **exact behavior implemented in the script**, including implicit configuration generation and simulator setup that users do not need to manage manually. Its goal is to help customers: - Understand what the script configures automatically - Provide correct inputs and parameters - Validate functional correctness - Debug failures systematically and efficiently Execution targets a **Hexagon v79 simulated environment** with **LPAI v6 ENPU co‑simulation enabled**. ## Audience This guide is intended for: - Customers integrating QNN LPAI models - Validation and verification engineers - Developers debugging backend, model, or simulator behavior A basic understanding of QNN concepts (context, backend, system library) is assumed. No prior knowledge of Hexagon simulator internals is required. ## What `run_hexagon_sim.sh` Does The `run_hexagon_sim.sh` script acts as a **controlled execution harness** that prepares and launches a Hexagon simulation session with ENPU enabled. Internally, the script performs the following actions automatically: 1. Determines execution paths and working directory 2. Locates the Hexagon simulator from the SDK 3. Generates required RTOS and ENPU configuration files 4. Determines and creates the output directory 5. Launches `hexagon-sim` with the correct parameters 6. Executes a QNN sample application inside the simulated environment From a user’s perspective, the complexity is intentionally reduced to: - One application shared library - Standard QNN application arguments All application arguments are forwarded **unchanged**, ensuring behavior is consistent with execution on real hardware. ## Command Line Interface ### Basic Usage ./run_hexagon_sim.sh {app_so} {app_args} Copy to clipboard Where: - `{app_so}` Path to the **QNN sample application shared library** built with the `hexagon_sim` option enabled. - `{app_args}` One or more **QNN application arguments** passed directly to the sample application. The script does not interpret or modify these arguments. If no arguments are provided, the script prints usage information and exits. ## Environment Variables The script supports externally defined environment variables, falling back to defaults if they are not set. ### HEXAGON\_SDK\_PATH Path to the Hexagon SDK installation. This variable is required to locate `hexagon-sim` and simulator runtime components. If not explicitly set, the script uses a built‑in default path. export HEXAGON_SDK_PATH=/path/to/hexagon-sdk Copy to clipboard Failure modes: - `hexagon-sim not found` → incorrect `HEXAGON_SDK_PATH` ### HEXAGON\_SIM\_PATH Path to the directory containing Hexagon simulator artifacts and ENPU components. If not set, the script defaults to the **directory containing``run\_hexagon\_sim.sh``**. export HEXAGON_SIM_PATH=/path/to/hexagon_sim_artifacts Copy to clipboard ## Generated Runtime Configuration The script automatically generates the following configuration files in the current working directory on each run. ### QURT RTOS Configuration (`osam.cfg`) `osam.cfg` is generated to configure a minimal QURT RTOS environment required by the simulator. The file references the QURT model distributed with the Hexagon SDK and is regenerated on each invocation. ### ENPU Co‑Simulation Configuration (`enpu_cosim.cfg`) `enpu_cosim.cfg` configures ENPU (LPMLA) hardware co‑simulation and includes: - Two LPMLA hardware instances - L2VIC configuration - Qtimer configuration required by QURT All addresses, interrupts, and hardware parameters are **fixed in the script** and represent a known‑good ENPU v6 simulation setup. Users should not modify this file unless explicitly instructed. ## Output Directory Handling The script determines the output directory as follows: - If `--output_dir ` is present in the application arguments, that directory is used - Otherwise, the default directory `./output` is selected The script **creates the output directory automatically** before launching the simulator. Execution fails if: - The directory cannot be created - The path exists but is not a directory Note Using a unique output directory per run is strongly recommended for debugging and result comparison. ## Example: Minimal Working Invocation The following invocation represents a **baseline sanity test**: ./run_hexagon_sim.sh \ ../lib/unsigned/libqnn-sample-app-lpai.so \ --retrieve_context ./model.bin \ --backend ../lib/unsigned/libQnnLpai.so \ --systemlib ../../hexagon_v79/lib/unsigned/libQnnSystem.so Copy to clipboard Successful execution confirms: - Simulator startup - ENPU configuration validity - Backend and system library compatibility ## Commonly Used Application Parameters ### `--retrieve_context ` Specifies the serialized QNN context generated by the LPAI backend. The context encodes: - Graph structure - Quantization parameters - Backend optimizations Context load failures typically indicate version or backend mismatch. ### `--backend ` Specifies the QNN LPAI v6 backend implementation. The library must: - Target Hexagon v79 - Match the backend used during model generation ### `--systemlib ` Specifies the QNN system library providing low‑level runtime services. This library must match: - Hexagon v79 - The SDK used by the simulator ### `--input_list ` Specifies a text file listing input data files (one per line). Each input file must: - Match expected tensor shapes - Use correct data types - Be **pre‑quantized** ### `--output_dir ` Specifies where output files are written. Automatically created by the script. ## Input and Output Quantization Requirements The QNN sample application executed by `run_hexagon_sim.sh` **does not performquantization or dequantization**. All inputs and outputs are treated as **already‑quantized tensors**. This implies: - Input data **must be pre‑quantized** using the model’s quantization parameters - Output data is produced in **quantized form** - Any dequantization or post‑processing must be handled externally Note Providing floating‑point input data may not produce a runtime error, but will result in incorrect or meaningless outputs. ## Execution Flow At runtime, the following sequence occurs: 1. Argument validation 2. Generation of `osam.cfg` 3. Generation of `enpu_cosim.cfg` 4. Output directory creation 5. Invocation of `hexagon-sim` with: - Hexagon v79 target - ENPU v6 co‑simulation - RTOS and cosim configuration 6. Execution of the QNN sample application Indicators of successful execution include: - No startup or backend errors - Context loaded successfully - Output artifacts generated as expected ## Debugging and Validation Guidance Start with simple inputs and a single inference run. Validate: - Output files are created - Output sizes and counts are correct - Quantized outputs dequantize correctly against a reference Inspect `osam.cfg` and `enpu_cosim.cfg` when: - Escalating simulator issues - Comparing runs - Reproducing failures ## Common Failure Scenarios - **hexagon-sim not found** → `HEXAGON_SDK_PATH` incorrect - **Shared library load failure** → Architecture or ABI mismatch - **Context creation failure** → Incompatible backend or model - **Execution succeeds but outputs are incorrect** → Inputs not quantized or outputs misinterpreted ## Key Limitations - ENPU configuration is fixed for **LPAI v6** - Hexagon simulator target is fixed to **v79** - Intended for **functional validation and debugging**, not cycle‑accurate performance measurement [LPAI ARM Backend Type](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-fastrpc-backend-type) illustrates the LPAI ARM backend type execution. ## QNN LPAI ARM Backend Type **LPAI ARM Backend Type Execution** ![LPAI ARM Backend Type Execution](data:image/png;base64,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) Running the LPAI Backend on an Android device via an ARM target is supported exclusively for offline-prepared graphs. This tutorial outlines the process of preparing the graph on an x86 host and subsequently transferring the serialized context binary to the device’s LPAI Backend for execution. To ensure compatibility with a specific target platform, it is essential to use libraries compiled for that particular target. Examples are provided below. The QNN\_TARGET\_ARCH variable can be utilized to specify the appropriate library for the target. ### Setting Environment Variables on x86 Linux # Example for Android targets (Not all targets are supported for Android) $ export QNN_TARGET_ARCH=aarch64-android # Example for LE Linux targets (If applicable) $ export QNN_TARGET_ARCH=aarch64-oe-linux-gcc # Example for QNX targets (If applicable) $ export QNN_TARGET_ARCH=aarch64-qnx800 # For LPAI v6 HW version $ export HW_VER=v6 Copy to clipboard ### Prepare config.json file { "backend_extensions": { "shared_library_path": "/data/local/tmp/LPAI/libQnnLpaiNetRunExtensions.so", "config_file_path": "./lpaiParams.conf" } } Copy to clipboard Note To run the LPAI backend on an Android device, the following requirements must be fulfilled: 1. `${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpaiSkel.so` must be signed by the client before pushing to the device. Use the Qualcomm `sectools` signing utility or the `sign_hexagon.py` helper script provided with the Hexagon SDK. Refer to the Hexagon SDK documentation and the QNN SDK signing guide for signing procedures. 2. `qnn-net-run` to be executed with root permissions ### Create test directory on the device $ adb shell mkdir -p /data/local/tmp/LPAI/adsp Copy to clipboard ### Push the quantized model to the device $ adb push ./output/qnn_model_8bit_quantized.serialized.bin /data/local/tmp/LPAI Copy to clipboard ### Push the LPAI related libraries to the device $ adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpai.so /data/local/tmp/LPAI $ adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpaiStub.so /data/local/tmp/LPAI $ adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpaiNetRunExtensions.so /data/local/tmp/LPAI # The LPAI FastRPC backend also requires the Hexagon skel library (must be signed) $ adb push ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpaiSkel.so /data/local/tmp/LPAI/adsp Copy to clipboard ### Push the input data and input lists to the device $ adb push ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_data_float /data/local/tmp/LPAI $ adb push ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_list_float.txt /data/local/tmp/LPAI Copy to clipboard ### Push the qnn-net-run tool $ adb push ${QNN_SDK_ROOT}/bin/aarch64-android/qnn-net-run /data/local/tmp/LPAI Copy to clipboard ### Set up the environment on the device $ adb shell $ cd /data/local/tmp/LPAI $ export LD_LIBRARY_PATH=/data/local/tmp/LPAI:/data/local/tmp/LPAI/adsp $ export ADSP_LIBRARY_PATH="/data/local/tmp/LPAI/adsp" Copy to clipboard ### Execute the LPAI model using qnn-net-run $ ./qnn-net-run --backend ./libQnnLpai.so --device_options device_id:0 --retrieve_context ./qnn_model_8bit_quantized.serialized.bin --input_list ./input_list_float.txt --config_file config.json Copy to clipboard [LPAI Native DSP Backend type](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-direct-mode-backend-type) illustrates the LPAI Native DSP Backend type execution. ## QNN LPAI Native aDSP Backend Type **LPAI Native DSP Backend Type Execution** ![LPAI Native DSP Backend Type Execution](data:image/png;base64,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) ### Overview The **QNN LPAI Native aDSP Backend Type** is designed to enable efficient execution of the LPAI backend by providing direct access to the DSP (Digital Signal Processor) hardware. This approach eliminates the overhead associated with data and control transfer via the IPC (Inter-Process Communication) mechanism, resulting in significantly reduced latency and improved runtime performance. Applications that can access input sources such as audio, camera, or sensors directly on the aDSP can run independently of the main operating system (Linux/Android). To use the native aDSP path, these applications must be integrated into either the audio or sensor Process domain (PD). Execution on a physical device using the native aDSP target is supported **exclusively** for **offline-prepared graphs**. This mode does **not** support dynamic graph compilation or runtime graph generation. **Choosing Between Backend Types** | Backend Type | Communication | Use When | Notes | | --- | --- | --- | --- | | ARM FastRPC | Host CPU ↔ DSP via FastRPC
(IPC overhead) | Standard Android deployment;
qnn-net-run on aarch64 | Simpler to set up; higher latency due to FastRPC
overhead. | | Native aDSP Direct | Direct on DSP; no IPC | Lowest latency; embedded
audio/sensor PD applications | Requires signed libraries and root access;
`is_persistent_binary: true` required. | To run on a specific target platform, you must use binaries compiled for that platform. The appropriate library can be selected using the `QNN_TARGET_ARCH` environment variable (see more details below). ### Target Platform Configuration To deploy the LPAI backend on a specific target, configure the environment using the correct architecture-specific binaries. Set the QNN_TARGET_ARCH variable as shown below: export QNN_TARGET_ARCH= Copy to clipboard Supported target architectures include: - `aarch64-android` for Android-based ARM64 platforms - `aarch64-oe-linux-gcc` for LE Linux-based ARM64 platforms - `aarch64-qnx800` for QNX-based ARM64 platforms - `hexagon-v` for Qualcomm Hexagon DSP platforms Important **Not all target architectures are supported for Android.** Some platforms **lack HLOS (High-Level Operating System) support entirely**. In such cases, HLOS deployment instructions do not apply. Ensure that your target platform supports the necessary runtime environment for LPAI execution. Refer to the [Available Backend Libraries table](https://docs.qualcomm.com/doc/80-63442-10/topic/backend.html#qnn-sdk-backends-table) for platform-specific compatibility and deployment guidance. ### Setting Environment Variables on HLOS Android/Linux To configure your development or deployment environment on an x86 Linux host, set the following environment variables: # Example for Android targets (Not all targets are supported for Android) $ export QNN_TARGET_ARCH=aarch64-android # Example for LE Linux targets (If applicable) $ export QNN_TARGET_ARCH=aarch64-oe-linux-gcc # Example for QNX targets (If applicable) $ export QNN_TARGET_ARCH=aarch64-qnx800 # For Hexagon version $ export HEX_VER=81 $ export HEX_ARCH=hexagon-v${HEX_VER} # For LPAI v6 HW version $ export HW_VER=v6 Copy to clipboard Note To execute the LPAI backend on an Android device, the following conditions must be met: 1. The following Lpai artifacts in `${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned` must be signed by the client: - `libQnnLpai.so` - `libQnnLpaiNetRunExtensions.so` 2. The following qnn-net-run artifacts in `${QNN_SDK_ROOT}/lib/${HEX_ARCH}/unsigned` must be signed by the client: - `libQnnHexagonSkel_dspApp.so` - `libQnnNetRunDirectV${HEX_VER}Skel.so` 3. `qnn-net-run` must be executed with root permissions. Prepare config.json file for direct-mode, where `is_persistent_binary` is required for direct-mode: { "backend_extensions": { "shared_library_path": "/data/local/tmp/LPAI/adsp/libQnnLpaiNetRunExtensions.so", "config_file_path": "./lpaiParams.conf" }, "context_configs": { "is_persistent_binary": true } } Copy to clipboard ### Create test directory on the device $ adb shell mkdir -p /data/local/tmp/LPAI/adsp Copy to clipboard ### Push the offline LPAI generated model to the device $ adb push ./output/qnn_model_8bit_quantized.serialized.bin /data/local/tmp/LPAI Copy to clipboard ### Push the Lpai libraries to the device $ adb push ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpai.so /data/local/tmp/LPAI/adsp $ adb push ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpaiNetRunExtensions.so /data/local/tmp/LPAI/adsp Copy to clipboard ### Push the qnn-net-run libraries to the device $ adb push ${QNN_SDK_ROOT}/lib/${HEX_ARCH}/unsigned/libQnnHexagonSkel_dspApp.so /data/local/tmp/LPAI/adsp $ adb push ${QNN_SDK_ROOT}/lib/${HEX_ARCH}/unsigned/libQnnNetRunDirectV${HEX_VER}Skel.so /data/local/tmp/LPAI/adsp Copy to clipboard ### Push the input data and input lists to the device $ adb push ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_data_float /data/local/tmp/LPAI $ adb push ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_list_float.txt /data/local/tmp/LPAI Copy to clipboard ### Push the qnn-net-run tool and its dependent libraries $ adb push ${QNN_SDK_ROOT}/bin/${QNN_TARGET_ARCH}/qnn-net-run /data/local/tmp/LPAI $ adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnNetRunDirectV${HEX_VER}Stub.so /data/local/tmp/LPAI Copy to clipboard ### Set up the environment on the device $ adb shell $ cd /data/local/tmp/LPAI $ export LD_LIBRARY_PATH=/data/local/tmp/LPAI:/data/local/tmp/LPAI/adsp $ export ADSP_LIBRARY_PATH="/data/local/tmp/LPAI/adsp" $ export HW_VER=v6 Copy to clipboard ### Execute the LPAI model using qnn-net-run $ ./qnn-net-run --backend adsp/libQnnLpai.so --direct_mode --retrieve_context ./qnn_model_8bit_quantized.serialized.bin --input_list ./input_list_float.txt --config_file Copy to clipboard [LPAI Native DSP Backend type for WoS](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-direct-mode-backend-type-winarm) illustrates the LPAI Native DSP Backend Windows on ARM type execution. ## QNN LPAI Native aDSP Backend Type for Windows on Arm **LPAI Native DSP Backend Type Execution on WoS** ![LPAI Native DSP Backend Type Execution on WoS](data:image/png;base64,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) ### Overview The **QNN LPAI Native aDSP Backend Type on WoS (Windows on Snapdragon)** is designed to enable efficient execution of the LPAI backend by providing direct access to the DSP (Digital Signal Processor) hardware. This approach eliminates the overhead associated with data and control transfer via the IPC (Inter-Process Communication) mechanism, resulting in significantly reduced latency and improved runtime performance. Applications that can access input sources such as audio, camera, or sensors directly on the aDSP can run independently of the main operating system. To use the native aDSP path, these applications must be integrated into either the audio or sensor power domain (PD). Execution on a physical device using the native aDSP target is supported **exclusively** for **offline-prepared graphs**. This mode does **not** support dynamic graph compilation or runtime graph generation. To run on a specific target platform, you must use binaries compiled for that platform. The appropriate library can be selected using the `QNN_TARGET_ARCH` environment variable (see more details below). ### Prerequisite All commands in this section must be executed in **Windows PowerShell**. To open PowerShell from the C: drive, open File Explorer, navigate to `C:\`, then right-click an empty area and select **Open in Terminal**. ### Target Platform Configuration To deploy the LPAI backend on a specific target, configure the environment using the correct architecture-specific binaries. Set the QNN_TARGET_ARCH variable as shown below: REM Example for Windows on Arm targets $env:QNN_TARGET_ARCH = "aarch64-windows-msvc" Copy to clipboard Supported target architectures include: - `aarch64-windows-msvc` for Windows on Arm platforms - `hexagon-v` for Qualcomm Hexagon DSP platforms Important Ensure that your target platform supports the necessary runtime environment for LPAI execution. Refer to the [Available Backend Libraries table](https://docs.qualcomm.com/doc/80-63442-10/topic/backend.html#qnn-sdk-backends-table) for platform-specific compatibility and deployment guidance. ### Setting Environment Variables on WoS device REM Set target architecture $env:QNN_TARGET_ARCH = "aarch64-windows-msvc" REM Set hardware version $env:HW_VER="v5" REM Set Hexagon version $env:HEX_VER="81" $env:HEX_ARCH="hexagon-v$env:HEX_VER" REM Set configuration paths where model and configuration files are located $env:QNN_MODEL_BIN_PATH = "C:\test" $env:QNN_CONFIG_PATH = "C:\test" Copy to clipboard Note To execute the LPAI backend on a WoS device, the following conditions must be met: 1. The following Lpai artifacts in `$env:QNN_SDK_ROOT\lib\lpai-$env:HW_VER\unsigned` must be signed by the client: - `libQnnLpai.so` - `libQnnLpaiNetRunExtensions.so` 2. The following qnn-net-run artifacts in `$env:QNN_SDK_ROOT\lib\$env:HEX_ARCH\unsigned` must be signed by the client: - `libQnnHexagonSkel_dspApp.so` - `libQnnNetRunDirectV$($env:HEX_VER)Skel.so` Prepare config.json file for direct-mode, where `is_persistent_binary` is required for direct-mode: { "backend_extensions": { "shared_library_path": "libQnnLpaiNetRunExtensions.so", "config_file_path": "lpaiParams.conf" }, "context_configs": { "is_persistent_binary": true } } Copy to clipboard Prepare lpaiParams.conf file as given below: { "lpai_backend": { "target_env": "adsp", "enable_hw_ver": "v5" } } Copy to clipboard ### Deployment Steps on WoS Device 1. **Create test directory** mkdir C:\qnn\LPAI Copy to clipboard 2. **Copy Configuration Files** copy $env:QNN_CONFIG_PATH\config.json C:\qnn\LPAI copy $env:QNN_CONFIG_PATH\lpaiParams.conf C:\qnn\LPAI Copy to clipboard 3. **Copy offline LPAI generated model** copy $env:QNN_MODEL_BIN_PATH\qnn_model_8bit_quantized.serialized.bin C:\qnn\LPAI Copy to clipboard 4. **Copy input data and input lists** copy $env:QNN_MODEL_BIN_PATH\input_list.txt C:\qnn\LPAI Copy-Item -Path "$env:QNN_MODEL_BIN_PATH\inputs" -Destination "C:\qnn\LPAI" -Recurse -Force Copy to clipboard 5. **Copy LPAI libraries** copy $env:QNN_SDK_ROOT\lib\lpai-$env:HW_VER\unsigned\libQnnLpai.so C:\qnn\LPAI copy $env:QNN_SDK_ROOT\lib\lpai-$env:HW_VER\unsigned\libQnnLpaiNetRunExtensions.so C:\qnn\LPAI Copy to clipboard 6. **Copy qnn-net-run libraries** copy $env:QNN_SDK_ROOT\lib\$env:HEX_ARCH\unsigned\libQnnHexagonSkel_dspApp.so C:\qnn\LPAI copy $env:QNN_SDK_ROOT\lib\$env:HEX_ARCH\unsigned\libQnnNetRunDirectV$($env:HEX_VER)Skel.so C:\qnn\LPAI Copy to clipboard 7. **Copy qnn-net-run tool and dependencies** copy $env:QNN_SDK_ROOT\bin\$env:QNN_TARGET_ARCH\qnn-net-run.exe C:\qnn\LPAI copy $env:QNN_SDK_ROOT\lib\$env:QNN_TARGET_ARCH\QnnNetRunDirectV$($env:HEX_VER)Stub.dll C:\qnn\LPAI Copy to clipboard 8. **Set up environment and execute model** cd C:\qnn\LPAI $env:PATH="C:\qnn\LPAI;$env:PATH" qnn-net-run.exe --backend libQnnLpai.so --direct_mode --retrieve_context qnn_model_8bit_quantized.serialized.bin --input_list input_list_float.txt --config_file config.json Copy to clipboard Note The output folder for WoS is always relative to the driver fastrpc path: C:\Windows\System32\drivers\DriverData\Qualcomm\fastRPC - For example: - qnn-net-run --output test\_output The output files will be found at: C:\Windows\System32\drivers\DriverData\Qualcomm\fastRPC\test\_output - For example: - qnn-net-run --output .\another\_test\output The output files will be found at: C:\Windows\System32\drivers\DriverData\Qualcomm\fastRPC\another\_test\output ## QNN LPAI Profiling QNN supports two profiling modes: - **Per API Profiling**: Captures profiling data for individual QNN API calls. This mode provides fine-grained visibility into the performance of each API invocation. - **Graph Continuous Profiling**: Captures profiling data across the entire graph execution, offering a holistic view of performance across layers and operations. Note The **LPAI backend** currently supports only **Per API Profiling**. Supported profiling modes for LPAI: - ✅ Per API Profiling - ❌ Graph Continuous Profiling Refer to the following sections for more details: - [Basic Profiling](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-basic-profiling) - [Detailed Profiling](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-detailed-profiling) - [Enable Profiling in qnn-net-run](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-enable-profiling) - [Visualize Profile Data with qnn-profile-viewer](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-visualize-profiling) ## Profiling Initialization To enable profiling in the QNN runtime, the following steps must be taken during initialization: 1. **Set Profiling Level** Use the –profiling_level command-line argument when invoking qnn-net-run. Supported values: - basic: Enables essential profiling events. - detailed: Enables all available profiling events, including backend-specific metrics. 2. **Configure Profiling Level in the Backend Configuration File** Set the `level` field under `lpai_profile` in the LPAI backend configuration file: { "lpai_profile": { "level": "basic" } } Copy to clipboard Supported values: `"basic"` (default), `"detailed"`. See [QNN LPAI Backend Configuration Guide](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-configuration-guide) for the full schema. 3. **Initialize QNN Context with Profiling Support** When creating the QNN context (e.g., via QnnContext_createFromBinary), ensure that profiling is not disabled by any runtime flags or environment variables. 4. **Execution and Logging** During graph execution, profiling data is collected and written to log files in the output directory. These logs are automatically named and versioned. Note Profiling introduces some runtime overhead. For performance-sensitive deployments, it is recommended to disable profiling in production environments. ## Basic Profiling Basic profiling is designed to provide a lightweight overview of performance-critical operations within the QNN runtime and backend. It is ideal for quick diagnostics, regression testing, and high-level performance monitoring with minimal overhead. **Scope of Basic Profiling:** 1. **QNN API-Level Events:** - Measures the execution time of key QNN API calls: - QnnContext_createFromBinary: Time taken to deserialize and initialize the context. - QnnGraph_finalize: Time to finalize the graph before execution. - QnnGraph_execute: Time spent executing the graph. - QnnContext_free: Time to release context resources. 2. **Backend-Specific Events:** - **IPC Time**: Time spent in inter-process communication between host and backend. - **Accelerator Execution Time**: Time taken by the hardware accelerator to execute the graph. **Use Case:** - Suitable for developers who want a quick snapshot of performance without deep granularity. - Helps identify high-level bottlenecks in API usage or backend execution. **LPAI Basic Profiler** ![LPAI Basic Profiler](data:image/png;base64,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) ## Detailed Profiling Detailed profiling provides a comprehensive view of the execution behavior of a QNN graph on the LPAI backend. It includes all events captured in basic profiling, along with a richer set of backend-specific metrics. This mode is intended for advanced performance analysis, debugging, and optimization. **Includes all events from Basic Profiling**, plus: **Additional Backend-Specific Events:** - **Inference Preparation Time**: Measures the time spent preparing the inference pipeline before actual execution. This includes memory allocation, data layout transformations, and other setup tasks. - **Per-Layer Execution Time**: Captures the execution time of each individual layer in the graph. This helps identify performance bottlenecks at the layer level and is useful for fine-tuning model performance. - **Layer Fusion Information**: Indicates which layers were fused together by the backend for optimized execution. Fusion can reduce memory access overhead and improve throughput. - **Layer Linking Information**: Provides insights into how layers are connected and scheduled for execution. This can help understand execution dependencies and parallelism opportunities. These detailed metrics are especially useful for: - Diagnosing performance regressions - Understanding backend optimizations - Identifying layers with high latency - Verifying the effectiveness of layer fusion and scheduling strategies **Use Case:** - Recommended for backend developers and performance engineers. - Enables root-cause analysis of latency issues and validation of backend optimizations. **LPAI Detailed Profiler** ![LPAI Detailed Profiler](data:image/png;base64,UklGRsBNAABXRUJQVlA4ILRNAAAQ0wGdASryBJ8CPwF+t1crJ6UjodcpGWAgCWlu/HRZ4TYHZ14fqL/zf7P69vEb9d/hfGfzvRZsa/p3+n5nfcJ/15ef/7/S+Iv5x+///31BfP/7te0m8w53UA/of7///bx/dRr4c/Zf//3BPJz/VftP5H35T/VfuH8Af87/2/qp/Xt6Ifub98PgM/dP////YMuAOSRAou3sJZCROLwjBcJCcaiFkEHLm6Xl+HKm2K3hMoxn32cvMVXJ8aJT31c40Snvq5xolPfVzjRKe+rnGiU99XONEp76ucZyn9H8fgs55YX3WTB1s+qCSJsiMGl4rLWBvY0CnlALMwO4ODdjwONp63B5mHSj8NMzqdS90ke3wsYJaWiU99XONEp76ucaJT31c40Snvq5xolPfVzjQDt84swOrndm8NiceBJjtFmv3LeSDSkUcgv/nmCDG8WwuP28ntwCMlZ4tLZuEuDFhRPhpZ3yifDSzvlE+GlnfKJ8NLO+UT4aWd8oPJYoHsY1co3+R5+S1AQKnwrfXW8jvFKuO9F71afhw9NQPGh2N1Hs3hgkCi8CifDSzvlE+GlnfKJ8NLO+UT4aWd8onw0s75G07kBGElCmhZOSk2xFv9jCmY88D4HFCCpZAhsO9tTHkqNuXWr0dLopU99XONEp76ucaJT31c40Snvq5xolPfVzjRKe+rnGiU9LCsu9ZLsU9vn/tsile3I/sKTHVnsXeUyIgprrwXHc75RPhpZ3yifDSzvlE+GlnfKJ8NLO+UT4aWd8onw0s2HiDJNX/Y4VvIEauJ+DkAcW8cMhHrrilUGVqKInCEWePW0VJ0p2HnGbkNq08eiwl3nqjdYCAXbfroZt7t5mlnfKJ8NLO+UT4aWd8onw0s75RPhpZ3yifDSzvlE+GJNEGoY44tK3XNhIg2Xc9v5diBpZ90qsDnHPkSwSZgt3/SIFgGyU4rhiQ2xUTarNh2PoNolPfVzjRKe+rnGiU99XONEp76ucaJT31c40Snvq5xWJHkBQdmOXOGrw0NTNEE0oJ+2cGmlnfKJ8NLO+UT4aWd8onw0s75RPhpZ3yifDSzvlE+BKhYOzFGj1DC4MvncYtk0gW7LaqVcNwEJWJl4rmsaH875RPhpZ3yifDSzvlE+GlnfKJ8NLO+UT4aWd8onw0s7Z7DJmrc+b0mSV921FH+4fCN2vsfjVAEZy5XQPAt6bXzALLB2DxLRh9RtLO+UT4aWd8onw0s75RPhpZ3yifDSzvlE+GlnfKJ8NLNf5TqW0dGwCcHQBpI27mIuZbe2nJ6XAGYToTyacB/uUIHLRKe+rnGiU99XONEp76ucaJT31c40Snvq5xolPfVzjRJUmrJvYaOQA+agDw2JUxEBCBIjhU6TUBUE0HG36B+qPrLUu5kET+reAHXtLO+UT4aWd8onw0s75RPhpZ3yifDSzvlE+GlnfKJ8NGxIcIIAIe8BGY76qWJ3dJZoe/o7XqZDkdTfpEqo8MW53cB0s/BRPhpZ3yifDSzvlE+GlnfKJ8NLO+UT4aWd8onw0s75RPNHAo7DvVacIXnzGuP0p+iBA3xqLksGxBTfzgowgYXAPVONNBD9lILShhY8glnlpaJT31c40Snvq5xolPfVzjRKe+rnGiU99XONEp76ucVewm4Lp2T7GEI4B66GWzXExniY4zJ8NLO+UT4aWd8onw0s75RPhpZ3yifDSzvlE+GlnfKJ8MU5hb4mBbkOZmv3RWzGp1e/b+QynC9MZ3jPl5lyx4oCN9wach95VMN1BjEjur3OZmSYjFr8VxQOI4J1t13XFX87nnleEXxzjaL3IPZ5Ote0ETUdlVl7XjI6LHiftea5Wqd84uskxYMauOLF/jZdbgViQELPXAKCB2+NTTcVPMnM2MkuqhoP8L5QRqHZ0q2DYNJEvxMrz0Zl+t04BXO7ETmUqewWcKe8arR6kqY66olCgV6xCasPDGwbWj+TWhm2Ox23CXNAhFlr6/LLjzJtIEykc+b4iyGaCRCD7N3LguSh2FgZ+tAmONIpybzs3jcdj/0hT8Pd57idSpxIOfL5ofX6TYsBTuooXAeXbx9jk4UQBJtEj9DnY/Wtu3ER+hlOkdnn+72SKjKL0BKSHkTtS1cjTp5VJ6XUEoh/A+y+G7GQxSRMa/JiaL7iud3BdNhx6I+w06LFMtgKeX/uBU0P3YcPriZ48xJOOxSShvjgl/te0IbWMeIJ6fOByzCmRLMOumwWH6SfMeWhAqhXiHaVtOaSxpTMGeoxuDvkCEwg8uXojWQ03H9J19m1tpnTqaUh3FAOGedm68y+GMWeITykjMXQ4R+EOtbwDNuoAxbzHoExmYzgpdAynpyvMDczPimA42x+ts3+ZcVioH0SsbXPQyXhdpSr53LfvOnbNBIwO828x55tBILzlCy/dorSbatpFnIo0rawYfYh/R8nlK5DMEkoDrFfd8sCuJouyX73d1OzBHirsGJhrDSXEOPGi/+tA8SbL8eis0zqxPSmMdrPvIseuZV+dMAZ266OmTx8bggrasdLkTGgTXfYkWnzY/sZyfc6+1QpFTc+vlvOw1/Dls6NHpW4mU5yZ8Fln6AS4DRYDQXClZcT1Nw2u+UHo7NvEkogTSd+TuEZOWDG50V4nqNGhErMclcX3auspc8iZI2IhyJNlrFRara7veI5w5ZeSJO0a6yR4w8QjkIBcM5EFbtIWhHK479aKdE6Xld2ZYcGwHfRd+D6ln5eFdLjtSPPOMBXqa+qsH0g/lJU+XJd8M50EyxlnCkc4RsrcmDLblcgS5uTQeZCTgQZnRcw52ArnNJAiv5fyx7FrxhmJ+n3MIzqbQooIwMWEkBW22gL0QXFVKWT8YZXU0BJ8cwYwqXhQZ6kOKgnZQCVFgAcDFribSokfh9YAz7ZE1FTgrdzpxR3KZqcKkqFL7lVMCZttMho3Xm07fAs7Zy6cwg2dqg5sCq1Glg0VnAgW3yNusteC7mFK4+iyDMgMIodvAjMKqSqV0J30fui7hIooIIfAMA/q58xucAB3mQY3Fw5DmBOGKwScKdoSJCqXqdF2LHXWGnkCqsAoqjzJyk3ZeBZtvt5hWlPThZWRWe0h3tYdx4XSe22EJuNJBc9M2mald2kRroIF9fI37fEJRDLAYuY8kuysWcX7d3x95hVzT3nJwjWvlex1zb/tDxqdYB/pcboB0X2jdaRTYxq5SnKwtK+Jh+DO8S4r5NNgBD79lL8uBEa4XRdkE4pQrSHYTkDyl8uyiL2fmLwfs6f9UfsrNeVJjwMz8jOF1MSMb7tbttWQlu3NXzgXZcD6WKHtfIyxcR3u34LTol6lxgD/S42urOfu/VyA60yIUcJ+TymGwWlvNYZA4GpYGG19mcfgcF5h/czPRJZ7yCgn5mGkXZxOEfdK/mFWVpd1QGrnFUDuSprrxH5qIsyjD4kiB0z3x6QDhrRrKvfwqKChty6/+JNBS6vPURgT7L8Qj0nFWyhSlliqRyg30aSAgQfBRCsj6+pLJYK3yNz3k/KED8kSkuPYTtXxQu4Rks4+wY2INJi0QvQYg84L8oIsjZL+jHaMQfSc6E+z7Dei0vfIDGsOswFhqEdMm++p5xk9L5fAiF7YM7e5XKDld+5JVAwBx7q9o+KnFf0qhbtTq8w1y/0sd3a1KOpXh+PXOUxm/amVeSDfBjLTcPlE+GlnfKJ8NcBwKJ8Qr5/JbY98qR4aWd8onw0s75QdEI6PncfdFjJCN74732AFCvsSgyjHfoPM21yk/9KXI8B8darrHLALMPkwkIkZvG5do/Psh3lguuCFAbfsKe88Vfkyd6ZidgAbB+7EwGsBRPhpZ3yifDSzvlE+GlnfKJ8NLO+UT4aWd8ou1TSOJ+r1O2MrLkuyMzFhVuUkdjERPu9DBF++DWk7IT8enMLipRvxs8nSR5ZpZ3yifDSzvlE+GlnfKJ8NLO+UT4aWd8onwJtKjI68HmjefdUINhEsDeLTO1K/d7n/O3An/IzS7I6hmAIw24ZpXKoVG9ZwYaWd8onw0s75RPhpZ3yifDSzvlE+GlnfKC7cx8iIfqgjCbdZ9UaR3NVzj78t97G0njhY+Wff/v3XPp/0LPrZ3jvw2rhrxhInCuAOsVs1cmSrKWpgTLQ4QI7N3EvAonw0s75RPhpZ3yifDSzvlE+GlnfKJ8NK+uDHp6w3/aJFTxq0yt3sgSt/AA1deQI3je1f7kWaYfHvons7YAuFzjRKe+rnGiU99XONEp76ucaJT31c40Snv4X92nLkqHyqx8NUJ8c6Uu00uyBdwDRHe0tIl2PX1DHyr1anvq5xolPfVzjRKe+rnGiU99XONEp76ucaJT3m2esYla5VKSlcOdnt3VEBd/KVjvAonw0s75RPhpZ3yifDSzvlE+GlnfKJ8NLNWoY2DbolyTgEj/IBHbC02KahnyYM8LnwslCwDSDrmDwP2yGigqoKBo1oI0WcFZV308w+kJAWFE+GlnuJaWiU99XONEp76ucaJT31c40Snvq5xolPfT3FriK2REcKmTzGRiEGcbVOagTe4wAoDBZuvaWd8onw0s75RPhpZ3yifDSzvlE+GlnfKJ8NLO+UT4EBwuoQYNcDJadlZNMtcDOvavyfhDc9ySGgmsTuWgCntEp76ucaJT31c40Snvq5xolPfVzjRKe+rnGiU99XOM3w6j3Xstt6s3fC7i3HqqPtc2RYkPVqnSK8Az95JVBQhz7NV7i8J47T9iEinvYZJHi2lnfKJ8NLO+UT4aWd8onw0s75RPhpZ3yifDSzvlE+GlqqlviJhX0dEcSRfMhohP2mncBI7DAOJ26CUUPL/R8jYyGSjnGiU99XONEp76ucaJT31c40Snvq5xolPfVzjRKe+rnGicmicNBkmql2aLzSDaRBZjVQGIcJLwKJ8NLO+UT4aWd8onw0s75RPhpZ3yifDSzvlE+GlnfKJeBSl7/TwXki46NfY0s75RPhpZ3yifDSzvlE+GlnfKJ8NLO+UT4aWd8onwwwAP7d5BXFOU8Xg57nwkEd3xJU8psl8AplwI+y9udN4hNrUqzLEebBDzerZ7IHinAVEHEjOu8SS0B8SEPIRW37m6svIrN2hdrRkGbav6Hr3LyO08q5oVKCmNl5S488Fc7XMzDHn58WgtY2mCk9F1XhoDX7I6mPsWR4Pev+Rnpp3DlgqtzY0r8pkd8BNBDE2VYcOrLxxk1l7QPqbmF1+4HhKyM1u2EB3Eff2591t1o8TTsWosSfyLeQYBqSBIJqZVsBU6icwVeKnTI7P19AIy6YQ5uIXLqGVnBMlcWbLXeTKDjJBpWRRrYqcl9h9hqkAA3GYeKkZNvE8XmY4b79JPhvwXR+0gvLGcepxobjCaqX71MZMGhZmsdQJOH/IiW3z5U5HNsX4MNCA2SuE/U9cVb/G8zSBCGkTiCtSi5s91WrU6pLDtXciopXoUkupgkI770RreCAjh2lImYM6oImSo2A+bAEA7KtgHnm3cScxcWpk/87wI2ZCMc12GAdTC7HmU1r+tWhb/m2hPREWl+WleJYQiVXkTK4QtRT1QfKixg4Jfn6sOgHqlPPYuJokWQ58vKj1LdgM8VZOVXJ28dKQsT2673UL9HopCl1/JrovdUL5HnjVLrThW+rnSdjYrSg219Sdumf/3LUZLQutuqImcrHsqNPc07dSyhEnxrg4Ao97iPsh20DXo600Qn+mX1sxiEhpFJEUjQKHSPmuBdof9Th7VJAAPIpKdPqQ2W1ERejmAb6RZJpUAnKr4D25m5+fYjQs/qmcgV8YqooqdQ1R2pm03+ldfhJYX2z6S+Her9LVhKC9c0ZgRhFhUKuL8mBcECSYTySVg9dbNm842TnVQfct/gXkFyzQ23I8zYh3uX9GN1ecEKDhQAByT00E7Zz/YjmRLHEDWgBFoyEa7UGH12igyYXerKyxfSo0EADJYptlQsIC1QLbkVsH/GxArf5b9m/0+UiwZi4a44O+Beji84slF/TY/shB/zkBZv19buq/+prSagVi0KKr/spERZ57C0QPcVKnhRHqBbo6RFztSfNu7aTz4sngLYXEccQ6lvtxIf+MWv4HIOmPrx13RuMaKlzvU0XUEzKWoSSnF2tcy3cSKvkuJ0AaGCjAw+9+pt6UL7cgxJh6OaSAAlRh05PGCrCCzESw6g/ievJWGygyi88I5jkUtQsnYahKHB7XE4Ogk9mWFzStlZt4wI6GHC4mM7U3qbJ0PbYmf6h+HLfnUCWzi0JiDliAWayFQGYag7yTZjLrj3iptNbYYM5AVueSOEazZO0jltiVvbgYCT96rf5KmOnCKG9TAirUsEPgyEKpWsG2VZhq3wh6myAvYuSLb043hsXdLyFkauHJNP6o5VButGPN6wd6qU0n1pIel+v9FnwAAsEsMFQZWA/rlxkxjS5MPaN7MaIhNCINeUTF3951ZnPM7eXjzjpbgbW0zM9GTMT5GrtsWgpmHFLMsDnrpojG+tDUEmEtMXLXHjfjvsenz8FUFvZxag+KolwbWp9v0pBAGelpnA1IlQIhQ1+u5Rk8TxPIKywJXF0Wx69mKveWkY8djfNQuvsN567MLlkkSxfaXPMNo/knZQmZa5Wl1R7bqRQL9e3bfw4MUS6uAgTVFBzu2YR1VRzkz5aiaSJzaMCRHlD/1dWr7UovTFXuRCioM8KEwLk35hjP82PSwKeJpv1kLU7fYb58BcXzLnNCGqvsmQNp2q2db4MhNHgAJmsnK5NxbX8eNBH4RC3ECeKts2JKENbBn/JXvaZl7RfObtv4oDCQgACyaDbE8A31fvyNo8zHmd75DSXsswPg8+T4lPlPiVYEVWrqyy/Hxzana6xloKkjVwk+IA6L9e9034ktFOEMB9Yv1qMZY1mR9ftMXZfz0HasvnEorttW2JPus9vnhXGyVNV3D1O3MO0cN/rnXxpLKkXPI98ERkH3Zcr/SFsqbfdIIedPWGLG8B6/kZaxpcwAJ1czuTfe8c692WGT+8YWT4XkU1BGb7WRTVprVGveJRVHRW3MWjqgsonFeJ9rfdUPojAQb6ctiJMLrW8RvoYpgvaQeektJn28dERUeFVmm+JsQuMkz+j/Xng40gcdBaUE4qwu7NAS6sNIDzFIaAPhVCP/9UTF9Qta0M3ZjssNtFnF3CnKJASyuYNlVhqT35BeGv8t6I0nDDKC4yMD2wn8S/lBtHKh95I41WW9Xbrid6sHX0EA9T+arBA6ZdWqXPyv2LsA+shc7ekNgpSSql9V21RJGDiiXowuZjKiSWDkOJQvbKOnp3NwtDTkbO0Wy+ezHtDGs7O1vcVjpezZBImB10CuEtuFEvG8R/HIMg7k5fxDZXJ84A1Rdzv3TKxBCfEp/uohJ/2ftin41NzKPwWMxvCvnL0Gv2X1jxfZdWmYjc9aJSs+4ZKfNA+UYZJAa7oo5kGgIPfmrOVVXacQ+1oaJchGx3JiOCYIfWvrCtRtdv3JA0rVhF02sDE73velORvD84BruR0LYoXMRtuEVSlwQf9BeuvPp+RCyOupNzfWRGRqymxlH4NhgQcybcArkZsQARmsQHhSMP0B7fwdVXxPZwGeOZILsiQ6iDZMcNxo/9TxvrnKpJ7uZJb6GHm9UEbG9qu6oZ+JO4FjpAgjcD+Y5ODBSlfnlcGwf01FZn4TSr+ajHIT78JpOVF7FK6wIFfWSRRdtsmgadMUKyfH2ZDik+UH+lPrKZHTsfO/rMCuqEzm/0dmSOvwWwVdG8ysWCAKD4/Jgn4cW5JDEChuK5/UFNVs41PMqY8NGyZllJMYgOUpXo0BtNkp4FQBeMslXeNeyb2ZkMHhOkq9SM/51T366GOIIWbeCB4MyYmm76rJrTrF4QprD6hq6B6ezsY4HQbgwZlFooxkhXCUZA8OQWyW1iK1sdFpkNT83+2BkB8RU8gyT4zx+cfeVFhEmHj7s4lrZPdst3Suvs4r1tNkAF1bBfTKHa+XhAl+BuBAkvLItY5dMhLEDzHgo82iD/mI33MkaRFy4IzrzhLGCLW+bIl8Njs+Yuzock7H9/hubACSMOikV6Z85SGLywvI1PBSURnAFtiXIbSG7X8b7KEeHC2w90sJ20yVEZ0XTcG3kAnV8B5gspD3g+WeluGoAWTy/pCU2+2KAGgRAsUTyzXcfh8ynY0pnbpLit2OnE8b16mmLjzbVQ9N3KbT3k7Ej/EBqwdFmEbajHhZR4OSOC95N4b1efi5Zzbr/wymLB9zwQY8x7KhuAc42WYOY5xIB5zrWiZwpS9PGrFd9wAAVx4heDIpb3BTVrioFdoplMEWvIink+ou+CVhVhU5RJUUAdv4WmX6KUKLjhL+s2mITNBO++8tLFScS7NAH8KFn8nTTtmyCM3WwuCYdSvd0ufgQ7Qd3gv92HoooG5EJ5H7pNxyirzFz0HgAx5aIOlGA/2t9vFy7iE6gnlax+dznAMgM5HC8WYWQwIN5kQ67GmjQX2RwCcOcYRXH6eHEEsAJ3tyCV4q88lctG47WnahIHETJF1LhZPfk9qKFpOGOyE8E4sZBhKlrTpVzlO/WhsvxylHMdBQ5QlzBF5Uho70sOmBfw1a+6Vxvks+igMFMKQZMsrbgQPFkRP3FrqGjAGPj2d/d91VeW3SMpL2wG7HwCYvCirfE3p1cvAr51nGTCwLsfrVrMq5p6Cs6LsFPkBLFO1TdxdJwmh/KrbW9NFLy0se0WMvwRWERtcswxT35J1886nqv9MRPtMtqhLO4DvdK/GL6UjZurWVkSSGA0UG2HaidLC/p8aR3K8janKCCtug4NaoSrFpSNh9xE6bX8hmQA+oxuMET0lWu2DBxDqpkPSWhV24nrUKB+WCq4W6shVLCljr/+F1z84I6Es2uMkz/9SY6uwd+a/QLGOjh6yTJ/uEWyOaNYGHK/0ZL9Y9XgL7ADjO+XDAt0JGD1ZnJQb8SyBx4Kuq4dQBObFt7Nvqu4kHPzsOKevp553ovoVK7jOSwr6wzVf+jNJICWmBuMjA1CTQB7hWv+KrIggE6SPaEbuqgmV6LNgeBdkZhkn5spXi7pfpLISEo+14bC9CHRxmgAHUeQConiCx445kwqMp6AjXeGqth7Cuhq0uldSZ+83Ws1tVPmnGQYcpmQdjQXWAid8GRCeIcwPfFRnsSIGN+EsrPcanDEBLa1jwE2y/cwH8eVOyjZUnoUtNnGnKmtPtsYPnAR+aBvC10nI8bml+amiU+++xjdMoCKzioKb8dSxlJm3dEnmeYh3SbciWA1WT0Dgle+q5wYEG8Y+cQMy+gqboBFEbcS+9s4dBObL96CXamNL3paOO04alJfFZi3Bq1g5wTdgZULgkaCcFoALvMv29hGW2KQNsGybO89QADXml9T1YmqbKJjQ80MK/ecgIz/ZwSJB4+byHbxKvcTU9Sb6U8H8BXIRzsDNTkq9JX5AXIUVb/agnxCoLpE3atQ8mHnvDd+pJEEMYFNU/4cgjKESaezJXFzb/ZoZcSiC6CM8DCFYH5KiwrMjg3NScPjpt1kZlOdeZovo1Kf5JMYLBaPmpV1p6OeTBKpfByni1hYHibWk8Q5UeflAgig/P2CPvNfxXzinhVARG7zVWk2IU6xje7fPmGxxmXdZWQ14duulOFsi0/btNx5CFFEDQj3M/NPfX6NBVmCq0Q24+gfr7BtC5BIA8r2g/0ZXvSE2yXPOMvI/re5TKBd/ux77CEWieJXXE4tgjtu7GnShhGTcsh0L2P6IIPJkwv4rEGbMmybC7PPq1S87px+73OFQQaMsCNkszfOi8iRr8WTLz1FTwXCSbflAvG7cKHepk4+xmlyhHwEP89+Yy9gAok1aCwQEGFERvlMwHKOoWq1d4Ziq0SGy/1KkPzyIf82qP1xNMuqPMCy9OlyPFGPHTXxHQq4TAABC34pCjxLD93rJRVGDCR8OUMA16ioQpjfpd7cbkdcixwrEwUn8/AArak5OLsplPT0CPzF3cmEodScgOCQrgIqKtsXUXAQ3Q6NtpfpPXe00Bs8+uwi2SPVmhJSg+2lZ382vJGqpvnyEQSUlFAHhKFZNfzwlj/WidrQTTDWeSDCT7yX2R16LuwPiuSjQIn3sPr2LYROduGtokpaAwx6gSBFLfy/vGuEb47OUxLL3YCcEDX2/kCuP1oTXvU1vzQKKcb4cl0Bx2aaAhlIAAGNqHCWphiYqohe8xMh3cxdMDVpOWrie9tsCCKc3WuPpfMYRvP01ioUQBqg4o+LyQ4WAyGuZUXK939NOvTX/NrEGXHLjc5zug2HhWvOIlFUtdbSWHZpSvstJBqpUDcfwLv2/dXrVGMXEhU5r40K95PkN2aKkTr32CTDKEjKngRr+h3HGkoLpLFc0Mog+5HvVzWkZ694ebHDxuVOvUcOqZTeBgwY/eRX7Pf5Nl/d5eOcQpuXdguayEr6ZThRI6esBpP8KLMETbFEtKEUkfd2EMICDEJjPAQ5C3ANPyH1zKXLBt/92wzSfkD2RslHbAcubuTyLfRe4+zVY7zJ+L7i6ZmZYN2fnrACahjd0Dw82krOGNRB8CsBTaUjJzYitH8su6AEtMR1DlEoAEkhfg51aSt7mJoNO+Zkjn6C+fYqHtD+WNY4Y+xOq22tuyUeaTk0i3FrCnHX+cZm8stM2KX6hnLtW4FabQNZDRkC7Xn1oiBz+rGrXE0GVavBIR4QeJN3Qj8L53xA/emAoHU3+JJV7rggAIyVH66SQy9qcqDztFbw2neyqd8lvz5POFQ3/4e+jEltJNR79vZ9cyxhoZlr3GeZMzzjelkkibaDMLmUMZwJZ0CBQyj94dUEstFPYsKVeMIDZyZ7Af+Pv1dmFHQP9/MAmA/GIk1vGp00f8MpivfzWnNXI8YOU08ui+QVRmLKgA1yfQYfAxTAspwxQt24n1OCoJ7ziNOz4Rm5wgjuOmlYqLl4BMMO8DCJXwLO6KTQXQTLenzWTcOqC55C+yMTKM6awYoCuBBt5puiAHDAS0lr6sRwiZMiBDOyr3Qk7kgkQuqqQeqY+uAI/173Ma/lj/rVvEmyfvDedkDOG9CroPKia3ZuPcb+nY3SLITRdqVrErMsXGSDjAYjeBFLsw5eEBYom2Ytmn8VY1ELTcEnk5AvyGAVjn1M1+9jdRXGFn2Lp1L4PAeMszzqqsTNWFo/FVcUswq9HQ8Ug7uz6ajEiQsCOV1KGVUkQgV5+ZM67itiFpiiwx2p8TwiaY6EEAjWB4DONg2HEyZEbUPJNrILgh7JhWJfPfj9L8NcqsdbZ1NsgTwyYpAgYICeF+62KdZEb5hIyUyFoM4Qo92rPFiDLnjp/i+QUlqCJ1dexfz3gUDqP68V+3tneRJBWDJCUiawrCG5aqNiqQARxmIMuXKmXbYdRPFj/Y2W6G1kcXNkeHJmFrB0v4gfkGQyAbvtWT3KwGsY/7TZwSEK128NZNnrol9l2aLWP9WPVeskdLMh1LsyA9iFGl0YasfwxGjtJNeEqireUroVT/I59uxHXo60Z25Onu/W6nDKAlnIYsHZU7WH5880DPtVsLdUk2XV1PALdACfL4bWDACTjCyy/uoeqe50PMCw+i5Dv5v6UPw/2Ry5npj6Bk3jUot5dI3QUIWdlqkyu8EIpZpjOCHiMOZao+ZvuePOL9UsZzQ+rAJs3B4e+xIWTxkny3soCmJLmiRLkcAL8xcXHzR9VUH90M/7lQPLlBLu6vJRA4Y8s81S2mfLOXsxWizMrqfbi5YelOYCP/miONl+97d/Z6YBs8pkd2PSRy4bGbZjZpqviLdqz+yPNZusURSzHgQF49wOmrEnWIc0mUQDJusm8VUvPvpjAnfuyvJqG11oCmw1vdZBqzyM2tfOq2MhNEWo+1d1h+M1zM6nBZe1GYfS45FTKFjZ1nxDd+3Sw5Pr/UDluIWjOyRV2zknaZkKRxpCLIyc77mc86QewmW98jXMgwjWgXmL96w+pzAOu6BNcq0zlDYruEW7HUu8XcxTi5ZxnB/MELGeaOkHnNQ9faIiTYGw4H67jBYGeVIfwzAm0Becr5rz4P30IBn5d4UMBKdarmVmgDcmA6zEc1LnM7Ga+++QqAXEOULnvKptbZZjnn/hg62VJoh10VvJPb0sgUPNFF47unMlI8ejjEGr1tGraLNlHSX1Pc4qEQANedtt7UpK7sBpVkxhzCPN0auOcjvQeurF+lV/Qg83G8pVXKMwywKioXVxH21xYVmCdEU5mA1fnzWIOVlNRinVXOaS4AxWzKfu6Fp3U9wrpDZt8kp8gc7WbwwVRwpFvJdGiaS6vKqHW/O2qgEvS/zZmKhWT0GZiIg+27usb1JYq0LFqhT4lM7XhGn00PMnGQe/EActZ8SIrGQOAv5MjiCXLWSCkFAF9IfDlbuQvWWQUWZSlVSgVTxZN7UCR4keNlmK7cWfDYoemR0juTpSrgqRgR8sA22P9QBAoDXzCzXLmioXTuf1mSVOO+oG4SwzWO+GykHNqDDFcKrkR/9+zB6vvHqAXW1v3As1lGoA2zHsZTqBhGCBWZjFCcdvCQwJqNTUe6TuUjnrlQg0RmwLoRyc0NJNJUD94Lf5gLFI45QQ+qLAPJf1Cx1Fow/bi+aHxRm5Uw5isQpurwFYx7yrkt3IXYthEFok0aF9FTidZSlR7X5bD1x+/5a8ZKwF3vvFJUv6bn3RjITLnFxjQjaEnfGQ5Tjw4x/7GghBS24sZAp0IWel8GTqk0NBVbEmh/00BywTGYrWTAJv96XmGS2dZ1lkOis5cqepmdejCLk7Tln7QePoSU8zAG9HU4c9bzThyEx01qRcAlvxZLlT0qjSdtMM0aUyeQKeLm0rZ6NAO5g21kf9YI8yHwDjJxqKoXABDpzMScUhmjEPM9WpKKRySPQaXFtVGjIuvzysk5J7PbgvFzPN55BMBLhmzOSiAyzLs9/4y6tGnc4Uto7iLnmzf48A5ombLyzkp3crZ8BfW5UOH6Gvdk7ynrrS1E28WJ3Q47kplr1lcNrRSTFp/7lJMPY6XgPnxB9HlkuNw7Df4pW2Yp/9p8NzSjpFZdadV80X4SRYyHlE+lYsxVkCNutIo4hTCxuXmAZRsJz0kDxPo34OmIgydGQaw7wgRomdmE4WkRoBpmXOikOvNW7J57mIte6b5cj42wjcGzFFs3dqsq0CGG8agPdnnFJ08nSRXzm7p0lIgMwvekH6PKEu+aJ+5xCu0UFsFAZG4uZMKzavN+s0L2SoZSI3GQlrRZSPZXdwLa9fJyh11/uA9yBjC13i/DJqEwFJmPK0B8a8ikWr4zSL7uicP78HxgUPee3hO06gPVUA9yshER5vdrSp4trbH3BESjN2RTWff0YiGLV++GzvMu+0NCECBF1w00vavfsr1CEfYmanbVFNNEcYbqOw7+f1NWkWqMYAWgIy0X3hnMZ5EjpV5Ir+4cCl04o2EUZrWyNGLRyRq3u9VOyp6RO2BphsiewEeqypXlIZlZXsUi2FmREoWIpSORMbyh2orDSclFVkXcj8queLhaxseZWHZlIfGCh9ZD3l7IJLbBF2C+cemTUrGh+sQJRH+QZ408GwTuLjfr9xKBCKh1975MZyXuBU8ifndBHudsuZoXitTOJJyJDUKlORqQda5G9CbTazF+pKLXo9GUxKx5hKNE9Td/7cgekLCQIPeC/H4qFjAoUe2JWJdAR6lnzU7tLGzlKtG/8Q2t4eMF4clEjnJ+6XT1ACp6Ms+LSa2o37CpjVE4pbAiDYRORZFLpz0oDQjouXgYBn6oPt50ynS8yjzp//RKoq+DqZhR1qvAFQY/9/uEDn9SsDymwBhOhkCJ8YJdttzyCrn4iI/F33U41cmKYGnGY0xCbPRZQzoE/fPCVkAIOaHgp/sNv7ICEtWBLDUYmWVXZI5RziIPDcFJU579xYatu303eC8gupWOiJop4AitBaBRTUEa6MpC3KUJgO52gWWkbdkGzvkXLtNwW8THmwlM+On5y8XG3J8q1G8gnDSU5sF2tnVMQY8GLODFZA3899DLZDxbQLDz84djAwm+wCfm3XyARkrbmNZA/FvR4VDQi/ZaLJHZbJlBhondaXPx82Y/tuPK2ybDAxmIN2wlumZdRrvcvJiGJ7hjQQmxX0/uE1y6/JRPx9UY+EPe5b0NqmqaZ2uJ4evYSa3kw2dUbENBnAP9lRqRh/ezpvYI1MVtJumAxZ6ZFjXcysBJ7QoUgjEqSDqad2EwjI/S5ds8SVXg55BXb18eISJ3HhKUVQ8YrEAbuwrVeTrLJaj998ONbCiwWZcJdIC2FnhjQKIypu2x+mei5DJ2/Dkws2SRUXiWk/wfRn4OA6sLj7x53FBA5IjxV5uumLgEaDEg6FAcuScwiE3sEJs1ure0zozz6URq2n1K75X84MEHaHzC1AP4rMryzCFEB+HF+wVc4Yci/frUHBNFNzhedQZ8SFPYbPIYDvWNdCCUWxgAQW7Qvu3a5ytaXaeUd43KO7IQv2GrJW25xyGwOXNRF8671WnkdSgE5KpxjpO14p4g3QPW4o33Gc5i468bIabzR6Pjg2T5F2PpBaGBcLTkTo879RNDXpRC/kMCmGRjQ6e6NRiSFwnsbPtQ7UipQNXxNGtQBSrzx0RHQF6aqwwiKIb0ZMfMujJuRVSLp/cDlBONROLks+7PGNRq2HF3Z/HUj+KLBRuNwONTpcpLVayKshLdbrvym0OVIdfE54AA1HB91rtcCkLtDXxd6AFCy1Mpervv+IMEREVEGscJjvXdQJEZRycuMM+oVmxyUBoXhEwt+pvn5MXwOGKC8sks6whj5vRxX1xHosEGG5w5uxhgKMpT22BuGKlKVKR+dPsy4c1NwnUeS3ckpDZbBgb/ua6UzIKbLyOJlH92kb5FOJSFTkM5PeBOvuYQbsYR7Dgyvw60UJzfwm7VNIPYt+P56b4H1ABLKVy+RDdRsuo6Kb4pd/nJEf8m811aezD/++qqa03hd9x1Q49QU8Zgk6oSd1ewnOitJC+PLvd+7hEuTT1sBoDFy4Uo4XVpq+jrLojVf06Nm+Fxi5Uf49xgEZrNYu6JZmoKRLWuldEu25Cnl4WhAroB3slrG6zp4PYkCKZhWBiEsTuKYkJFpPJtWW0c+Cy5wMd1eS4/8pUAuoE9/1r74GowRj4+hd2mRSIAEknpmeLDKm5Kh7jFRWCEIE45JlMoV6stRJVspxn7k7LTA9Yct/myP3evOrgymUK9V1T/erNSxz5FSIysxWygDw4wXi49b1AOs89BG6Asn3K3nVI0T21SisPts7tRtQ52sw31Pu37aKHiLXfbSZR3SBQCjiLkj1nUgIfMAui66/0UV1bpoGP4/xPD8ILa0OlkguwbRdRDIS16McJsSZJOy6xwUHezWzmXJbFfsVRVcpoIIirz2dZPP/iFEgGku9J22J2H8auvqdGXOSWVeY2zBdifJQE7H6ctz+Lsrkg/aFtHK78zD5EEnefDwF5rei+C+Iv5pU6YSkKrW5YljtA2ziCVb5Eqmrbtr0MXVFOmH1EB2sdbQvdybJOZMvXUZdAtbZer12PoqEkatKCI+ooN7ANimEMbCzza1YxYpSOJgSHXuDr/8cAhLFDIM17887+d8s63gO6pZFp8b1TUkihxRuoj3I4tTBDm/AqV7qvrzud1IxH3BKGFUSu+MngGlqIoY1HlEmBctRXG8kSR9pfYI0FN9MkXxevIHqndtNuGVMLI7YZf8LBgjAmAu5us75E/7sOg31ytUzcaAwDLMUxG8EaJRecGv90FLyEYKU12FxBSecEk69hZq8e3kwCvf+f6eUe3roCS+1ZbK96U5WsCcPL82JvSy8/g8VAs9yPHNAqIZyysK8GOpf8AIOW5kBVTXbVgnpz58oZF/D0pjMfessg0hzPLPAAK90NSEmA+QCMWhokGtnOboQAarhk8W69nMtup1ujTooHbLeA4xX5SgpLX5AalYS5GMZj/2rAHoup14+acrT/J97EEh0ATh82P5lTryxTgLo4OoT4YLF8lBIQ0pGULjARJ+UQlw7N4x6/7h+oB1Ri1fqmNSAeifa2XMttAH8pAG7EunQmZmQpHVBJ/ymkytHpNQVMRob99pCC6tN2fVVq7D7iQKuD0ppkp1ApkKI0yGO2Qsx/97FVygdHAXNKVELToJnByt0clVWI5IWlY34Puiduc2NfVEK2jGSz5EfqtJ2ffOwN4wzBEbjixVCIIbW1LdD75T75nrz/LhLkxn6GGJ/AjIPbCZ5YZBmAWbSSbhP+qTnxw5z3W3BPeNQrAz5a9BQiKZUJzxXKETNaBcp0gTJRky2lqCsESBhx+BRzT6Hv9OPfY+xFdu7nIVLJLsh7WOzlkbDeYxg+tiguI6shg7ZNJvb5iLqIbB2Me5P6F4lbcWWNHgQEqZmVx0LxK24ssakaxyInCM/VHprD66k73WdPgDw+fq5GDbN4OMd0JNmS+uhGocC+8+Qzzsd/LjVx9mPqOWWM3pj+ZPzay+WW5CtKBccCEhPnvDy8AKYQSSTsybnC0s8NfQGE3+4lEcUZfQiGRJmt9opID1UJyQDKnZ+td38rRrXon0trGjQvDouAfor2x57oqOEK3pi9nNHxU8FVpPiXGSG6bX0O/yirImrwy/3jevcv9sdBVaQcwTac9Um1mtzE3aDju6cRVW996xenLsDVcH7iydb7SymKHQX2/2QrgDxC5iAUDX3y9aYx/lSfi79QxHYt+GNUMG66FB4Rr0zdNsgJ8nDnV/oWLZfWXFhXF2LZgedV8vJOpjIKSdVZ9yHkVXwV4xGsdK4BBPZ4yQn2pF/wQOFPUpLqDDf+HVFnHBGjKbGUw72MiZk9j8L2atbi8o4d4ld090D2DC/TwCF7n4/1FAyohzfiGzM8oZqbVsey8ZjLoxgzYF9rZFVbFgV2WH6fxmcBzsmL+1DLyH2AnjNOQ2zAVpTag2wcLWybSaYbcnaaJKVagpOo4sIPFmhuU45jjUvbc4CYbrIeNjdAAZRRR5bOwcPiB+/sn+MLOYgq10KCG76TBw+5Dn4IBtMe8Itbmbp66SV3N0KNCPAMnz6gITejBWzgoOlJlO3yp+YpG0qnyMv1h/VrfD4T/aR744M2YFt2oT5/8BCRZYM8QfiqR3MBUnqvuSOUuNyoZ+Tap1ASfRYVFwSEeIVVP9ngJTiZrJKSOzlgukY4q8HYNXaiYGUKV66ewPoJuvmIRR//WNt+CmC3+uZhYb712zQDZsMOtjCHAgLD+jjakC43WnQmV/07wtSWPp7lf3YOqJCIWCOxgWu651NHoTFo6fXAE/oc0yWVb/6tLKTqUlWF36zynumNf3MePIo67DEOcmTLS8m0i+94S1zdU6yMl1ETPUi5ZS60xO8MNuhAtvFDQTgMvALcsgA6mFaHqe/JXzPO+JvOb3B1/+OAQh6PI8Tr8kE2JvFFK+72mi1ljJBZPBJy/6F5EKo8DPo6jUlDdBBJ1r3ScNKS1WvQNLzs7SUqFmQ6nGluXOZ4JWaLxpCPAxQIzuD4p8fiktBF8m/pqvjYf6QTGdhmRgNucGS5TW3+upDCek4M5sdrrGW93tpq38OHhopx8XMIdqMR+wUUqZSzzWU18yXz3ZLW6JfS4ffcnkxEDiS/6hd6RUWKTynI3rBfO2Gtc9fH0KjdzaWtEJhW7qWGzIXeMFk5ff/ImEBD+Sdwx2zWsooFIFpktIiFShGJCoeLaTt0sQDtwA8IFsehXpPcVcgNaOvIwdkhAZsZ45whkr6pF1qedG+dCSMFhJ3gt+N6iit8mlKSJMD92hOpstKTJtQ/lvMRhar5AHW6uj9i+woytbnTvTYeEyKvZ4tV6NPghS0UQJcjkHP3EO0oJz0W661TH4lBLty3NxIvmgSQWjs2V3RO4oRzjfcnnKY0nlv3uY+PLS2hc24aC44EK7CddNTxK5zZ/MoUIJGwH7OyZPRpLtJDAbrGP/6BhI8c1V0lWcqhuKMmH8Af4kN4qoJj3KtBJROHhDTHMit3sslL+Zg0iPTiAzxuAlVfFcGIhaVu7SCiAUQ3l/Dl4JXLcy8kl32Y6ZtHtN62PiRqRQnZyyNhvMtb9cZ5Sk7gwgsxCG/GKaFjt6zb1NLxDvrBSl9k4eBMB44n6u2zgYowyV6li4T/5/0ezP97U53fe3Fcnz0Xbp3rnQSrBVyEYqX7dpa+qDyh2BV94ewDLHaf9V3lqFnSqlI73S568mZ6Spw/GjFOjrS/uo3rRiL7ThlcYA1CqxnyeRybO4C4bFQeocl3XA6cll5ne8LRTFTFnrqelXoUS6JEo+oA7xFfwP2dLzVsmA2Ww+Sch1BlymLpIcavPx1DxFiHwCm2nYziAtopGI4XB7f/E6TP+t13yQWxRgZRseGIukPnzgXDXw1NEnJc27YzLl0DuHh9mxV/v9zZME17PB/SmiLm3Pb32ljL1JLcUVv7Av6fuTaOOig73UM77SSEFnS7EKVU439R1f1cPG/nNDo/blLBHcLYqzBViuzCLRYxqB9ZGwvV+CyUsFsENXRs7q2wH4U+R3WFPfp+ouQciJpfungtOzl2bF+OVDXrV9VXZfwiSYFlwT1B9ytqqMceCYWsmXiuwP45ev/9j5wNlD6f3l81XCgN2fXKWzAlRuPr+oTr+pzJ/3Bm/OxijRxMbcKyrl3n4myGqbm4Ght0rAmItBBwSIS4/1OTfyRlIXKOQ6IaRpce7JFTy2ztqpsSnYGHE0yuNKOjo9BvkKKLS+uYUHG7Cyb0DWogP88ebU3YPKkEiYYWd2lE2zOIImTnVdQ3tOE8CN8QiLp0XMrelBHva8DhE36fooR+hPbruAfVHxSJYcy5XOmohxLNRqNixYsdB72uQP5GRp5TwdUEF6E0ZjQRIRwQaeZObbGKJYSoCYTGAtXcE0mnRgnY2mTItnAQFzu4fDN68fecV97z+WmZj2lfDZcDg8Ig8+JQhUpoPoDnR5tV6ZhItItZuJ0I5Flj+VPJkEHen1Bf3B1/+OAQh6PI8Tr8kE2JrrnQpIgMCGaaIKACNuXiyfI6d/n/SvQPS/kxbWmNLXsqpaY+uMJln0LaxNzlV6tKKmUxIXEnMQ3k/CAV3Lfha1o97SuEeTgR8IwuicmNI2NtOf978scvbOxjXPgON1emFNjpVXXWkKoKMa2IVZ+1VniA3byp2Wd9Sgfeh5zmW2/k2fxdafIjKz7G6LlHKT+7Rqo+jVXgkKnbRNxfrbQcB203I7ENa0SBV806kQmu1TwoG6FRzo5WU8CjmsIP9jdtgaA9qi6KjLhFgLI42b3ZzTDF33PpLKNhYliaBUQuNfa12gcfmD5hO2Ivd71eUIEcZ4PWUCB7Ma9/rDh212vUKI7PQ/OOFFBql6DkHKYA2rsfmFvA+Lkzp/Fo71xj/hKd7a5H9FoBZMOssCmKDTd9P+tI4i01vELFOKdqUv1QDG6Caaz6YoJH9b+mgVYqXj8ElWi12dnogzNeRKxf7mSG1ke0pRWrHCj90uymqQIpe0xJoac0gMfyxBbfvebeWYDYHebMvkCYChNTBH6MQxhAWNLhkBXKbmnsoZUbtrOvrcr0zdCHadoiKjsJDsEqPa3xK17KSqBl0WpVOVNOlVoAZn+u+QZtdBCL+iNO520o5pz3TDST6We9lbvlQmmISiAul2kImKxQtW2frquDBzSYb8ngNkB3u/VAbNgYvyY+tAz4oloYd1R0EfYvgqu7KjJ8+cJKHqZ3FyWevijk6iuT56Lt071sC/41UApSudxmf5nRWjVlfdGjkWaqJOvIQIY6czzvibzm9OERAG+hDPOu+J2dv1Vktfpd3usthNGmM1Uox+y4ynAMYuKrq9yEKRVJdVo5BhBY+ixJjISP2FLy6YX/zmnncZ/VFl9+sGPGMwuyBDWStXIQTF1CJp59j5W7Xe0rMRYPHDle15HzbvbTVvJkVGomUTpY5Y9xRjRg3p2cABQPwIIJ68ShCpTQfScjJcn/ijsHzvWG2R0lzc0jscmNEnJc27YzLlz/U63RlhaWCdZcuNx0fO2wwLtMgU5FQ4x+EO0xr+00RPz1+ooTQ5qB0W8TKYTuhGlFKqVXLXU2XSIFfp4+kGb/1jPRDNbJ3tGYk+IuM6Znyistkfiw0vFgUMIZNEH3geDJhGHSb7OPdjNZXJ/1JKXOgOPilfD4QwIGE113onGfAwJ9b93UWIgX0T1RGqWLAgZj2xA7l3Sx5KrSd1GVtW1prYVUno0LQR12IsvsD8mHJ1g01MxCxUDXsZj2PpCxoEWIpGbdHykbsSOVZjjCe/OKOT2r1YiKNvVmQY8hte6TBRNi9+z+DAQ+gk8LPb/0YuNK1+HwCOuBaEiVLsChr2/1x/Q1iuwpasBE5T2YZoG6iZrJJ+GHfElCdFoh0IkAysCrKQKFVbVKjH5HbEPiDnu5Z1uK2BhTMLDfZxTnVSZDh1sYQl3kcwMHDR5BRXJ/H4va8yNlNbIi949cHCWDWlNT2IPotjVEXnj3QuwlQEwmMBau4JpNOjBL1qkJNzJJbauu5YssLz53rl+CNwODwiMXH1oGfFEtXn4/hLrTOGdTEm9NF8iUnRAbU5h3nJZ/ElSRZbqTEOuS6HmnGKuLILkCQ5tRYgYYBxBNb6wmTojMVATkA21HPec+cysuHYxz4p71Xl4Fq2mWvyWAmi7/4N3fy41cfpctJklEUySBv0fr+aIVMhrjhpMnLsurDFCBEq4WZg2Bly+UfDNart8Btnc6BD1UocSTx4O+LYtKS3LOBLaT7dloEdUNAmCIV+AbS2EaWn+9DSaZUoa8ladK6XmCV8M+KIzIptuURT7R/jUXoyqOa2fz9HhfnEP8Ri08NiEvgTJ+Q17T1YRHMtkW39X0E8iwf3WOVye9fNOsaJX7SUGbn5C+1oJ12wyC3+brZbkZo1BlZZDndaNK/P9zp/Zt6k7VAv4r0tL/8fCdu/SvXNw30Ek9uaRvXxkcqzvohnAWDQlkpiV3cV2yyjPoz8w3jB0HZi70MH8G41e1ZilP1pGRQRXcUHMjWtXVgaCV/INsN8OnE0waHS+7AXKaVqltNsOnBPxCNfLnlVykt0a22WmNw/XSHxu8b4A2k6MD6vxEVHAuRis6DISMCvlqUtJOoZhq5xSOraqcXJ1TCW44P/rfdk/fj9QRoPI+vgV+43Z3h1yTQQElFjdVZhQRQ3GWxjLTtr+dOw9qI22xbrmmFmj8V7FLHNKKj0nhcs2QgEqA50PYwrVZMYO1bw2ysKuNgtS5K+rws5jYOFqluIGTegB2UFPvAqH3xBELtrDfl9i4raPIcvdE2zYPws9Y7UIWfBLtq1OXYfJP21amcqAz0KdeqiyX/sW7R4/lTFpBBtjoSGuZB2jZ9UcKjQRq4F0uyuCaoK7dCDwfOb4BAcAV0EtOm+LJD4fpni9WGRMST0OaVuF3nKF4U72iyesawMqsBo58cZN9Zc2e8t9CZqTg1YIMAVZqkvs7H69mD+T7iujQt5YegynQ8IaoJdtMBoLlm6flr1kqCPy8H/peW3vsqLfn6OOi1j7G4ENADb7WjDmaDZDHB4cfL1VBJ+DFxoNwwdVQSfgxcaDc2y+j/yXPc4eQ791Pfkrp+uFSQoOPNPiHtv+bJYtkAo7AsFYf3QXLvJW8Dd3ESZQLWF726EWOOBibwKBiX6IQ64QIh/Q0fQHQOI2RjcyzW+YKSWx98z0QB8c9HyDpODFCJz+RaBuSV61BgP6zZy9PrAyHh6arm2PkG/iy2ZkB/9O67gVbm23ERno95Swc+IWhSBfyypOAzlA0vLPH6bK3yhhVScr4lX92TLD1apSVklZ3CE9SdZ8BeFx1d2e4xKS7UwMlIjAcNnKHb6vQx/XIUlAh0QF/ANqw8k1MAlks8Kr9lId6+HBYDqZXx5I6tg+YY1TLBDIcFGqVXLR0sSLZvQKhUquWupsukMpxsOvG4GQc7CUx24pY4XCrS73obTYSmpImf4jsnEBhC4DZNWNF9C1K6inb0w2uERkL5cLqx6IUXVWLmA/qvXCOdaS+1oELrg6V2db/eAGJ884pPmjarTcLFvSp/va476cXJ4TvvYCI/la/pp9sHKmQweJtzWPopQ9UZPnxyJcDK+IdWnwI/FFpqkcxduT8WLm9AyInJHDlRKb5e5OQpVcDguqyETu6sZTXRcGXgkVhgrv53a01ULHWZJ/9TiWQ16jz085EIPjwADvmF56HZ1IAgRce3kaY3IyWapkQEFdL3D1ev9peL7oScqbV82aP3Lf9DA16vhEN/6PQFL5EbNEDQpUSAkGP+quXJZ9aV0wHH/w57R9XGwTQCoAx1b+TA+4+JYWql3M3sW6UEJRUXTmA9tnT8pvKiOP/Rw9BzGdenIgwiL4zFm8rlgVO6ihIGTyzTuN7SviiYlzILHfqkghi/88hUjQ11gFV6dxzT8Nrxm38vb6o2JuBYoJhJz0fw06FltfGcdSOrcoYaL4z7yjkjplPnK+sCw/dXaHKW6VKIugsXOd2NbE7QPKMIEz18eY/t3ZoTkEO7KXUaxdVZbbV0xbKZgCXBvecEq4+khvATwXAtoBYBJqb4qfOnMJBtrh5EfDIFr8GrWAV2E7nEUXUHthKYI7b9PNUzp3B8PnHDpTEszy7q2QIZ2BB+DMmgyV05hWJDXNnS6WFPa6Nl5GpYN58yrgLNJJ8mCHSVGC0tRviZdGuk6JTHT7dwcklGjfunbtuaAIXepHy15W3Rb1aCeGHO/qiFbE9qrPwkBRoA2Am9Z3DprvOvViSw3AB5B8A030Egxh6H8QqipW+GkZ/JYM5jHDUF7sVo0ARnXaTX6kEjOI0LmVsQBmUEfi6vYJeqbF+FCQUC583MgOR33J7yaphhl0JQ6p9qvtySBsMlmIfdLQXvWGPbVYwvdugNLkxm+0ovXhn2jQR+4pOuW1US5gXkzWOsV519/CMiK3fytbS4L0oAW7KfVKnKsL9VyJ3GuRkj4IZz18x51KsGiJTIsL9XAqOqWbsmhWUpmWnab4mXPivZ007wwtOWHAf1vNXQQ6je3qJiIJuXFoBoPtv6mz8wmFNm4gc3HUz1f621tNogABvWHvJGRKv1DmKerqIRK69prSO7gIhwXQ7FKrBz8N42X7d8eoOsD0Nig/OJgrGL5ancNtsdduRXu+uHrt1nTXsh2QEVN47I6XL9ic6wL5AGKQm7yPGncms7gCu7NTe+P52v2ZvFlzo0nvwy+f3qjGMeQ6Q6c7G28KMA7KSoGYraJ6dmFx0gobIf6TqlyTKVBuXIgZjh92cQdWR6fg4Jk8sPiTA575CjM1cVk0gUk4XAhn2YJicjYnWI+1Qtk/pPcHVydqtEbP8ioZscENQNaZCQHrKgNcptx84TqORgbRR9H8WhfUKFjQAjPN7E1QMwygfjx+OlgkLwTZg1PFJF74+IF5fGAozD1t7UEwoDBR7EZ5fnozpPz3HaTzS6Esyf44MfAiju4s7bnhDJT+p1EQs1msf5pGrZikpBzzj5RYAq/6KJ1m6cq+4RrEsZscKB+xF0dCeH2JzN1nibVfroW7G75wTvZWMA+3krf9lq0tLuNGpjmOClGj0RFzhagnWdKw3J/d1HZtnEVYilODqMpxM90ebN/acCiu3YDA8nTAAcfgNV1Fxqbp/jX3LTmH5RkmVWWwY3P6YZrVAGG4rEBd18FnSm/CmAyrVO3F8/Ahq3M7kCGo7QNePDAYnl0UZkiarXyJqlGw9pz6slU6D2TeqhMTyKGkO7ZgWKAah+hFw59EvU4IhHGrbCLRAm6ubv/c8SIdaKKWDObzBDs5Z1Y/811sOz0TJ4VsnpVCqNI+NyyxAyv9dxhoEQhPfaYAeybRXHt53f8b/6lI26GHHBJQOJeYi4yiCE7steJU9jiZJnqmHK32G6MYqW+14kotjVefUnIMcLST001wifd6OGGDCZyE4Ct8c6LHmxh9mCfUx0MwOyg2Ob3UgRJ2wOCsxR8o83OObH3pOWhFhDKYs95DsT345F+9vobwL0dGht6wayZnffKWrAC8n99MZv6D3vUPrxANzbYaSkLxVfiSUtYOWuQKwKbUejpsoqG+qxP0vw5XCuwrM1wOJ4r/iO8CLknK6HM/hYWlOAhWwHO8YDM19i7wTTlc1hYGYzMbe10txx3GMYLbPCfYwOMrqyefa/MCFtRLah0WS5S5M91D5GhCQVwBrvexKxhaiCN8H+4SpQ1+woBw4omIJJjLYtgSxhpWQ0/EK8kGh01a24fz70wO71h6Hwjcl/0S2bolKWMkH42y4jtVMN6glhfzU1F9es9k9k++WIBx9qRzv8CbgFbOx/3Mgk8Rlox5p9wigBwTyEFbAAkk7V4Op54tWSgQPyasKuGJyRnIxpGN/g3fsUY1WI67nbucUI4s2f+QcvKx1QpaQ1SGrEO/Rymp1P9X2F9//+7c5p6zFjywhJcZSsnFCwWoIJnJidUrJNZUvjkpJaZ53jY/CkHrUmlz61JZILYGXr9s1sbPttC2mm7bIt/OHNLYBeJMG1qCnF3yBbbkB/yinWC/aETN3WG5olvEcAGp1JmwDwU9TNdkN4Hen7QsRkjMF2s9LTqFjoAoMC3T1h21muy04bKXaOL/GkjPTOULl+gv17DUTMSgAFrs0QqrU9cmfhT1Dg32K9P/Hj3hOauDYMGgeQ6EuIx0iYmLoFtLtx2bQ4ZJwB1ErxqjXetoTK9IWW41xsxNINiqNl6ysut5MX+NSQKy+9rbFhfNnW6zxc1S6wx/I9I4LzWW9lYtSXEBfH0AfaiINDvqV50TByoz5Aw9x3D3HO7CLXVrbJDjoOOzoyQ33O3Dndz0vS2Da10C2l247ODqt8XDBMcrvS13kJjiojLCHEn/0cVgrgVLsqlcdMEuJGNti6NHf09TCwcoRnCQQqSBUZoU2hI8nBlMWzPgmi0n5qpCcE0sc8Vmnk5TSCsUJFmwwIv7o4dy33IBgZzpA4pwvI3Cdf5PSiuiUXIOM3GBz39YswRQxM8rJCzQzG8CdsdtNmLqoDtP0uFSrQiAmB1p8P0Unsuk6P33P0ZjUOPQKQVV6yJD9Apq/wAAM5InChmol+U/WKsRGOzABOTPR82whcVFk9ycLDvOFKt/hWs5hzsS/hzVClyQvgTcsv3unCypV+ibPGLo9KekCjlnx40FJ9DrH6crw9jTkT3GFnEJCKCNGQJIh6X1rDisJzw6fkoNcHuhmTmC7yMd+T/CtW6uYggodl+8AGeQm7yPGncmse03Tq6Ltq9V97yZHWrx9x0ZS3gzfgOiC0WeYtG1foIeMTzvfuK7AbJIZjsrBN3jZLDWixm6HX3lOAItsrPNg1cp3oXiLsZk8VOU5EMXFsAMwRttoM5WuVmuVsaf47HKfRY3Me/Z4TBGt6XSuGkhbGWuP3pPHJdbRqXt8hwFkZi2+8dxzCok3ewK+JCAaog9Urj3wL4wP+zsKEEMf6J+3zY4o4pVPLNfzYvHOPF7UJCpwMbJ8ZWvSKkUzvDS/ClUeheg9j7g9RMY8abACRTxNW3+BLPOyKcjsbdtLFnEZVr2uo543EHuBJng3ho9gAl22q6CdYKy1AAIe8USuMUYemce9kO+IheDEOiUjtLq1u7BxwgG3roFOgTxQiY3MGdh9uclb/stWlmMSM70RdxKZAVu6h7cHDoQ3ekF0fTj4bAz2rJhAHe7ZzeIxOAfZcQOeZRWO24lEcz6q3OTBrS3AILcuPZxKCToIchOWdfxLx2Rkeu0lFVtVvBOEpl2Ru4ATxktmdWfgVF2nteOceD8K+aFSnZLeB8bpIg9oFJHqdh8+6iUKZT1GjzoB5otnJNfFehFw55yFkPYiwzk4p6WmicjFcp4e7GtzNc41ULTtCi1jT/tJfW6feG264AVWKJXJFsoNmqh7kbhfooyDVZQvooFw2pH0RFFcfwcryM9O8w4K6phT+5NICbf5/DMynKvsJHN3kpPoEzC7HSXSTlS1xPoekkPnLvXIdo/HW8L1geNdmI2cAv+x2ODEPe06iTmNWDbI6pIK1DluzHpS9oyT2U3yrxtoA3FTbagAAHk0m9YNZMzw90hnXtZLsa0vDUSNHyI5oZAE+g82aA54uhwvDt3d0CxnhQoM6hF+SGxirKF1b8uV85MjzdNy7aztpBHnajU23ME/0RQWMWOe346JmSUZTK0QcHrQqvxPqykiP9GiV4hUapEhT5S19WNlfEqAbUHfSD3hJ7BEKiyV+5/bgNfWWIJYmwa29QczqvPxmQ5gSViUzdmkBE7v7bSH5n/2Ct6LeVrOOwyGbWlji88yaunX/9kfDxvzdgF+K/XjBaJk3t2EqSs2vRPlRzkta2kQKzKEABv/Wy4916DAXqIHsBQXvdXlM8g7Guh6Tmnn4JPrPUaq21mzKI+0A6/VuvDzdyrLui61NLYx/8Qjs3AOc1r5y5Y9jl0F8LBKb1BM7UVsJnOaaXACk/6Ofc2SYlpQpYn8K0IygpwdeO/A4uSeUZk59bTF0cCQmErtSkQgo7sywN7vV5Xe4fwJSlEUJO8ZoeJ5+6IAAAoHaTzaGxpNZVpRSB2zf21n1qHBdMPw+7kl73gX8cziFmxR7lgaGFXZStMg+x/9USy2c+4AAAAAAA==) ## Enable Profiling in `qnn-net-run` To enable profiling, use the –profiling_level command-line option: - –profiling_level basic - –profiling_level detailed A profiling log file will be generated in the output directory: - The log file is named qnn-profiling-data_x.log, where x is the execution index. - A symbolic link qnn-profiling-data.log will point to the latest log file. **Example:** If the graph is executed three times, the following files will be generated: - qnn-profiling-data_0.log - qnn-profiling-data_1.log - qnn-profiling-data_2.log - qnn-profiling-data.logqnn-profiling-data_2.log ## Visualize Profile Data with `qnn-profile-viewer` The qnn-profile-viewer tool provides a convenient way to visualize profiling data generated by the LPAI backend. To support extended profiling capabilities for LPAI, the tool dynamically loads the libQnnLpaiProfilingReader.so library. The libQnnLpaiProfilingReader.so library parses the LPAI raw profiling output and translates it into a structured, human-readable format. This enables developers and performance analysts to gain deeper insights into model execution characteristics, identify bottlenecks, and optimize performance across various stages of the neural network pipeline. **Usage:** ### Push the LPAI Profiling Reader Library $ adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpaiProfilingReader.so /data/local/tmp/LPAI Copy to clipboard ### Push the qnn-profile-viewer tool $ adb push ${QNN_SDK_ROOT}/bin/aarch64-android/qnn-profile-viewer /data/local/tmp/LPAI Copy to clipboard ### Set up the environment on the device $ adb shell $ cd /data/local/tmp/LPAI $ export LD_LIBRARY_PATH=/data/local/tmp/LPAI Copy to clipboard ### Execute the profiling viewer by using qnn-profile-viewer $ ./qnn-profile-viewer --input_log PROFILING_LOG1 --output ./out.csv --reader ./libQnnLpaiProfilingReader.so Copy to clipboard ## QNN LPAI Performance Infrastructure The QNN LPAI Performance Infrastructure provides an interface for clients to control the performance and power settings of the QNN LPAI Accelerator (eNPU). This is particularly useful when optimizing inference performance or managing power consumption in latency-sensitive applications. The Performance Infrastructure is accessed via the `QnnPerfInfrastructure` interface, which exposes the `setPowerConfig` function. For LPAI, this maps to `QnnLpaiPerfInfrastructure_SetPowerConfigFn_t`. Warning This API is intended for **development and profiling purposes only**. Its use in customer production deployments is strongly discouraged, as directly manipulating clock states and power configurations may lead to unpredictable power consumption, thermal behavior, or system instability under production workloads. ### Performance Modes Seven performance modes are supported, covering the full range from maximum performance to minimum power consumption: | Mode | Use Case | | --- | --- | | `DEFAULT` | Normal operating mode. Used for standard inference workloads with a balanced
performance and power profile. Maps to nominal clock frequency. | | `BURST` | Burst mode for maximum performance. Note: Burst mode increases power consumption. | | `TURBO` | Turbo mode for fast response time. Note: Turbo mode also increases power consumption. | | `NOMINAL` | Nominal clock frequency. Typical inference workloads. | | `SVS_L1` | SVS level 1. Light AI workloads. | | `SVS` | Slow Voltage Scaled mode. Light AI workloads. | | `LOWSVS` | Lowest active power state. Background processing, battery-sensitive workloads. | ### API Usage The Performance Infrastructure function is retrieved via `QnnBackend_getPerfInfrastructure` and then called with a NULL-terminated array of configuration pointers. The following example sets the eNPU to burst mode: #include "QnnLpaiPerfInfrastructure.h" // Obtain the setPowerConfig function pointer QnnPerfInfrastructure_SetPowerConfigFn_t setPowerConfig = NULL; // ... retrieve via QnnBackend_getPerfInfrastructure ... // Configure burst mode QnnLpaiPerfInfrastructure_EnpuPowerLevel_Config_t enpuPowerConfig = QNN_LPAI_PERF_INFRASTRUCTURE_ENPU_POWER_CONFIG_INIT; enpuPowerConfig.lpaiPerformanceMode = QNN_LPAI_PERF_INFRASTRUCTURE_PERFMODE_BURST; QnnLpaiPerfInfrastructure_Config_t perfConfig = QNN_LPAI_PERF_INFRASTRUCTURE_CONFIG_INIT; perfConfig.configOption = QNN_LPAI_PERF_INFRASTRUCTURE_CONFIGOPTION_ENPU_POWER_LEVEL; perfConfig.enpuPowerLevelConfig = enpuPowerConfig; // Obtain hwVersion from QnnDevice_getPlatformInfo. // The arch field of QnnLpaiDevice_DeviceInfoExtension_t is the hwVersion value. // // Example: // QnnDevice_Infrastructure_t deviceInfra = NULL; // qnnInterface.deviceInterface.QnnDevice_getInfrastructure(&deviceInfra); // QnnDevice_PlatformInfo_t* platformInfo = NULL; // qnnInterface.deviceInterface.QnnDevice_getPlatformInfo(deviceInfra, &platformInfo); // QnnLpaiDevice_DeviceInfoExtension_t* lpaiExt = // (QnnLpaiDevice_DeviceInfoExtension_t*)platformInfo->v1.deviceInfoExtension; // uint32_t hwVersion = lpaiExt->arch; uint32_t hwVersion = /* obtained via QnnDevice_getPlatformInfo -> QnnLpaiDevice_DeviceInfoExtension_t.arch */; const QnnLpaiPerfInfrastructure_Config_t* configs[] = {&perfConfig, NULL}; setPowerConfig(hwVersion, configs); Copy to clipboard To restore default performance settings after execution: QnnLpaiPerfInfrastructure_EnpuPowerLevel_Config_t clearConfig = QNN_LPAI_PERF_INFRASTRUCTURE_ENPU_POWER_CONFIG_INIT; clearConfig.lpaiPerformanceMode = QNN_LPAI_PERF_INFRASTRUCTURE_PERFMODE_DEFAULT; QnnLpaiPerfInfrastructure_Config_t resetConfig = QNN_LPAI_PERF_INFRASTRUCTURE_CONFIG_INIT; resetConfig.configOption = QNN_LPAI_PERF_INFRASTRUCTURE_CONFIGOPTION_ENPU_POWER_LEVEL; resetConfig.enpuPowerLevelConfig = clearConfig; // Obtain hwVersion from QnnDevice_getPlatformInfo. // The arch field of QnnLpaiDevice_DeviceInfoExtension_t is the hwVersion value. // // Example: // QnnDevice_Infrastructure_t deviceInfra = NULL; // qnnInterface.deviceInterface.QnnDevice_getInfrastructure(&deviceInfra); // QnnDevice_PlatformInfo_t* platformInfo = NULL; // qnnInterface.deviceInterface.QnnDevice_getPlatformInfo(deviceInfra, &platformInfo); // QnnLpaiDevice_DeviceInfoExtension_t* lpaiExt = // (QnnLpaiDevice_DeviceInfoExtension_t*)platformInfo->v1.deviceInfoExtension; // uint32_t hwVersion = lpaiExt->arch; uint32_t hwVersion = /* obtained via QnnDevice_getPlatformInfo -> QnnLpaiDevice_DeviceInfoExtension_t.arch */; const QnnLpaiPerfInfrastructure_Config_t* resetConfigs[] = {&resetConfig, NULL}; setPowerConfig(hwVersion, resetConfigs); Copy to clipboard Note It is recommended to set `BURST` mode before executing performance-sensitive graphs and restore to `DEFAULT` afterwards to avoid excessive power consumption. ### Performance Profile in `qnn-net-run` The `--perf_profile` option in `qnn-net-run` controls the performance mode applied during execution via the `LPAIBackendExtensions` plugin. The LPAI backend maps each profile to one of the five power-config functions: | `--perf_profile` value(s) | LPAI performance mode | Description | | --- | --- | --- | | `burst`, `sustained_high_performance` | `PERFMODE_BURST` | Maximum performance. | | `high_performance` | `PERFMODE_TURBO` | Fast response time. | | `balanced` | `PERFMODE_NOMINAL` | Standard performance. | | `low_balanced` | `PERFMODE_SVS_L1` | Moderate-low performance. | | `power_saver`, `high_power_saver` | `PERFMODE_SVS` | Reduced performance. | | `extreme_power_saver`, `low_power_saver` | `PERFMODE_LOWSVS` | Minimum power. | | `default`, `system_settings`, `no_user_input` | (no-op) | System default is used; no power config call is made. | Note `default`, `system_settings`, and `no_user_input` are explicit opt-outs: the LPAI backend makes no power configuration call and relies on whatever system default is in effect. `custom` and `invalid` profiles are treated as errors. **Example:** $ ./qnn-net-run \ --backend libQnnLpai.so \ --retrieve_context lpai_graph_serialized.bin \ --input_list input_list_float.txt \ --config_file config.json \ --perf_profile burst Copy to clipboard ## QNN LPAI Client Priority Client priority is defined as four priority levels that determine the execution prioritization of a client’s graph operations on the eNPU. The four priority levels, from high to low, are: - `QNN_PRIORITY_HIGH` - `QNN_PRIORITY_NORMAL_HIGH` - `QNN_PRIORITY_NORMAL` - `QNN_PRIORITY_LOW` If the client does not explicitly set its priority, the default priority is `QNN_PRIORITY_LOW` (LPAI internal: `LPAI_RT_ADAPTOR_PRIORITY_VERY_LOW`). The following table shows how the standard `Qnn_Priority_t` values map to internal LPAI priority levels: | `Qnn_Priority_t` Value | LPAI Internal Level | Description | | --- | --- | --- | | `QNN_PRIORITY_HIGH` | `PRIORITY_HIGH` | Highest priority. Preempts lower-priority graphs on a contested core. | | `QNN_PRIORITY_NORMAL_HIGH` | `PRIORITY_MEDIUM` | Above-normal priority. | | `QNN_PRIORITY_NORMAL` | `PRIORITY_LOW` | Normal operating priority. | | `QNN_PRIORITY_LOW` (default) | `PRIORITY_VERY_LOW` | Lowest priority. Used when no priority is set by the client. | The following examples describe LPAI behavior based on client priorities (assuming all clients are offloading ops at runtime simultaneously). Behavior for other combinations can be extrapolated from these examples. | Number of Clients | Client Priorities | Core Selection and Affinity | LPAI Behavior | | --- | --- | --- | --- | | 2 | Client1: `QNN_PRIORITY_HIGH`


Client2: `QNN_PRIORITY_NORMAL_HIGH` | Client1: core\_0, hard affinity


Client2: core\_0, hard affinity | Since the two clients require their ops to execute on the same core,
Client1’s ops will be prioritized for execution and Client2’s ops will
be blocked until Client1’s ops are done executing. | | 2 | Client1: `QNN_PRIORITY_HIGH`


Client2: `QNN_PRIORITY_NORMAL_HIGH` | Client1: any core, soft affinity


Client2: any core, soft affinity | Since the two clients can execute on any core, their ops will execute
in parallel on both cores. The higher client priority will have very
little impact on latency compared with the lower priority client. | | 2 | Client1: `QNN_PRIORITY_HIGH`


Client2: `QNN_PRIORITY_NORMAL_HIGH` | Client1: any core, soft affinity


Client2: core\_1, soft affinity | Since the two clients can execute on any core, their ops will execute
in parallel on both cores. The higher client priority will have very
little impact on latency compared with the lower priority client. | | 2 | Client1: `QNN_PRIORITY_HIGH`


Client2: `QNN_PRIORITY_NORMAL_HIGH` | Client1: core\_0, soft affinity


Client2: core\_1, soft affinity | Since the two clients can execute on any core, their ops will execute
in parallel on both cores. The higher client priority will have very
little impact on latency compared with the lower priority client. | | 2 | Client1: `QNN_PRIORITY_NORMAL_HIGH`


Client2: `QNN_PRIORITY_NORMAL_HIGH` | Client1: core\_1, hard affinity


Client2: core\_1, hard affinity | Since the two clients require their ops to execute on the same core
and both clients have the same priority, both clients’ ops will
execute in an interleaved manner (some exceptions exist, such as when
several ops must be executed in sequence). | | 3 | Client1: `QNN_PRIORITY_HIGH`


Client2: `QNN_PRIORITY_NORMAL_HIGH`


Client3: `QNN_PRIORITY_NORMAL_HIGH` | Client1: core\_0, hard affinity


Client2: core\_0, hard affinity


Client3: core\_0, hard affinity | Since the three clients require their ops to execute on the same core,
Client1’s ops will be prioritized for execution and Client2’s and
Client3’s ops will be blocked until Client1’s ops are done executing.
Client2’s and Client3’s ops will execute in an interleaved manner
(some exceptions exist, such as when several ops must be executed in
sequence). | The following example shows how to set the graph priority. See [QNN LPAI Data Structures and Enumerations](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-lpai-data-structures-enums) for `QnnGraph_Config_t` and `Qnn_Priority_t` definitions. QnnGraph_Config_t priorityConfig; priorityConfig.option = QNN_GRAPH_CONFIG_OPTION_PRIORITY; priorityConfig.priority = QNN_PRIORITY_LOW; // default: QNN_PRIORITY_LOW (LPAI VERY_LOW) const QnnGraph_Config_t* graphConfigs[] = {&priorityConfig, NULL}; qnnInterface.graphInterface.QnnGraph_setConfig(graphHandle, graphConfigs); Copy to clipboard Note Priority must be set before calling `QnnGraph_finalize()`. Changes after finalization are not supported. ## QNN LPAI Integration This section is intended for developers building applications using the QNN Common API and targeting the LPAI backend. **Integration at a glance** — a typical application follows this sequence: 1. Initialize the backend and system context handles. 2. Load the offline context binary (`*.serialized.bin`) into a `QnnContext` using `QnnContext_createFromBinary()`. 3. Retrieve the graph handle and query memory requirements (scratch, persistent). 4. Allocate aligned memory buffers and bind them to the graph. 5. Finalize the graph with `QnnGraph_finalize()`. 6. For each inference: populate input tensors → call `QnnGraph_execute()` → read output tensors. 7. Deinitialize in reverse order of initialization. The full call-by-call sequence is documented in [QNN API Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-api-call-flow). The LPAI backend introduces specific constraints that differ from other QNN backends: - **Memory Allocation**: LPAI requires precise control over buffer alignment, memory type (DDR vs. TCM), and lifetime. Incorrect alignment or insufficient memory causes initialization or execution failures. See [QNN LPAI Memory Management](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-memory-management). - **LPAI-Specific Data Structures**: Custom configuration types must be correctly instantiated for features such as core affinity, performance profiles, and memory binding. See [QNN LPAI Data Structures and Enumerations](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-lpai-data-structures-enums). For detailed guidance, refer to the following sections: - [QNN LPAI Memory Management](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-memory-management) - [QNN LPAI Data Structures and Enumerations](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-lpai-data-structures-enums) - [QNN API Call Flow](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-api-call-flow) - [QNN LPAI Batch-Multiple Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-lpai-batch-support) - Sample App Tutorial Proper integration ensures compatibility, stability, and optimal performance of your application when deployed on LPAI-enabled hardware. ## QNN LPAI Memory Management This document describes how the QNN Low-Power AI (LPAI) runtime uses and manages memory. The runtime relies on user-allocated buffers that must obey backend-provided alignment constraints. Incorrect alignment or insufficient memory will cause initialization or execution failures. - [Overview of Memory Types](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#overview-of-memory-types) - [Get Memory Alignment Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#get-memory-alignment-requirements) - [Scratch Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#scratch-memory) - [Key Properties](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#key-properties) - [Querying Scratch Memory Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#querying-scratch-memory-requirements) - [Allocating and Configuring Scratch Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#allocating-and-configuring-scratch-memory) - [Persistent Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#persistent-memory) - [Key Properties](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id19) - [Querying Persistent Memory Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#querying-persistent-memory-requirements) - [Allocating and Configuring Persistent Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#allocating-and-configuring-persistent-memory) - [IO Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#io-memory) - [Key Properties](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id20) - [Querying IO Memory Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#querying-io-memory-requirements) - [Allocating and Configuring IO Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#allocating-and-configuring-io-memory) - [Shared Buffers in the LPAI Backend](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#shared-buffers-in-the-lpai-backend) - [Memory Lifetime and Allocation Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#memory-lifetime-and-allocation-requirements) - [Recommended Workflow](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#recommended-workflow) - [TCM Memory Support in LPAIBackendExtensions (ADSP Direct Mode)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#tcm-memory-support-in-lpaibackendextensions-adsp-direct-mode) - [Allocation Details](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#allocation-details) - [Configuring TCM Memory via JSON](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#configuring-tcm-memory-via-json) - [Invalid `mem_type` Configuration](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#invalid-mem-type-configuration) - [Testing TCM Memory Support](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#testing-tcm-memory-support) ### [Overview of Memory Types](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id74) The LPAI runtime uses **three distinct memory pools**, each required for correct graph execution: 1. [Scratch Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-scratch-memory) 2. [Persistent Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-persistent-memory) 3. [IO Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-io-memory) Each type has unique allocation rules, lifetime characteristics, and backend alignment requirements. - **Scratch Memory**: temporary and overwriteable tensors. - **Persistent Memory**: long-lived tensors such as RNN state. - **IO Memory**: input/output tensors; may be user-provided or automatically placed into scratch memory. All memory pools must be correctly aligned according to backend requirements. ### [Get Memory Alignment Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id75) Before allocating any memory, clients must retrieve backend alignment constraints. These constraints apply to: - Scratch memory - Persistent memory - User-provided IO buffers To query backend alignment requirements: 1QnnLpaiBackend_BufferAlignmentReq_t bufferAlignmentReq; 2 3QnnLpaiBackend_CustomProperty_t customBackendProp; 4customBackendProp.option = QNN_LPAI_BACKEND_GET_PROP_ALIGNMENT_REQ; 5customBackendProp.property = &bufferAlignmentReq; 6 7QnnBackend_Property_t backendProp; 8backendProp.option = QNN_BACKEND_PROPERTY_OPTION_CUSTOM; 9backendProp.customProperty = &customBackendProp; 10 11QnnBackend_Property_t *backendPropPtrs[2] = {0}; 12backendPropPtrs[0] = &backendProp; 13 14QnnBackend_getProperty(backendHandle, backendPropPtrs); 15 16if (!error) { 17 *startAddrAlignment = bufferAlignmentReq.startAddrAlignment; 18 *sizeAlignment = bufferAlignmentReq.sizeAlignment; 19} Copy to clipboard ### [Scratch Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id76) Scratch memory holds temporary intermediate results that the runtime can overwrite and reuse during execution. #### [Key Properties](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id77) - Used for intermediate tensors across graph execution. - Fully memory-planned offline by the backend. - Size must be queried from the graph. - Must be provided before `QnnGraph_finalize()`. - May be replaced at runtime but must always exist. #### [Querying Scratch Memory Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id78) QnnLpaiGraph_CustomProperty_t customGraphProp; customGraphProp.option = QNN_LPAI_GRAPH_GET_PROP_SCRATCH_MEM_SIZE; customGraphProp.property = scratchSize; QnnGraph_Property_t graphProp; graphProp.option = QNN_GRAPH_PROPERTY_OPTION_CUSTOM; graphProp.customProperty = &customGraphProp; QnnGraph_Property_t *graphPropPtrs[2] = {0}; graphPropPtrs[0] = &graphProp; QnnGraph_getProperty(graphHandle, graphPropPtrs); Copy to clipboard #### [Allocating and Configuring Scratch Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id79) QnnLpaiGraph_Mem_t lpaiGraphMem; lpaiGraphMem.memType = memType; lpaiGraphMem.size = scratchSize; lpaiGraphMem.addr = scratchBuffer; QnnLpaiGraph_CustomConfig_t customGraphCfg; customGraphCfg.option = QNN_LPAI_GRAPH_SET_CFG_SCRATCH_MEM; customGraphCfg.config = &lpaiGraphMem; QnnGraph_Config_t graphConfig; graphConfig.option = QNN_GRAPH_CONFIG_OPTION_CUSTOM; graphConfig.customConfig = &customGraphCfg; QnnGraph_Config_t *graphCfgPtrs[2] = {0}; graphCfgPtrs[0] = &graphConfig; QnnGraph_setConfig(graphHandle, (const QnnGraph_Config_t **)graphCfgPtrs); Copy to clipboard ### [Persistent Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id80) Persistent memory stores intermediate tensors that **cannot be overwritten**, because they must persist across operations. Examples include RNN state tensors. #### [Key Properties](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id81) - Holds long-lived intermediate data. - User must allocate memory after querying required size. - Must follow backend alignment constraints. - Must remain valid until `QnnContext_free()`. #### [Querying Persistent Memory Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id82) QnnLpaiGraph_CustomProperty_t customGraphProp; customGraphProp.option = QNN_LPAI_GRAPH_GET_PROP_PERSISTENT_MEM_SIZE; customGraphProp.property = persistentSize; QnnGraph_Property_t graphProp; graphProp.option = QNN_GRAPH_PROPERTY_OPTION_CUSTOM; graphProp.customProperty = &customGraphProp; QnnGraph_Property_t *graphPropPtrs[2] = {0}; graphPropPtrs[0] = &graphProp; QnnGraph_getProperty(graphHandle, graphPropPtrs); Copy to clipboard #### [Allocating and Configuring Persistent Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id83) QnnLpaiGraph_Mem_t lpaiGraphMem; lpaiGraphMem.memType = memType; lpaiGraphMem.size = persistentSize; lpaiGraphMem.addr = persistentBuffer; QnnLpaiGraph_CustomConfig_t customGraphCfg; customGraphCfg.option = QNN_LPAI_GRAPH_SET_CFG_PERSISTENT_MEM; customGraphCfg.config = &lpaiGraphMem; QnnGraph_Config_t graphConfig; graphConfig.option = QNN_GRAPH_CONFIG_OPTION_CUSTOM; graphConfig.customConfig = &customGraphCfg; QnnGraph_Config_t *graphCfgPtrs[2] = {0}; graphCfgPtrs[0] = &graphConfig; QnnGraph_setConfig(graphHandle, (const QnnGraph_Config_t **)graphCfgPtrs); Copy to clipboard ### [IO Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id84) IO memory contains all graph input and output tensors. #### [Key Properties](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id85) - Can be user-provided or mapped into scratch memory by default. - User-provided IO buffers must follow alignment requirements. - Must remain valid during graph execution. #### [Querying IO Memory Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id86) // QnnSystemInterface is defined in ${QNN_SDK_ROOT}/include/QNN/System/QnnSystemInterface.h QnnSystemInterface qnnSystemInterface; // Init qnn system interface ...... // See ${QNN_SDK_ROOT}/examples/QNN/SampleApp/SampleAppLPAI code // Extract QNN binaryInfo const QnnSystemContext_BinaryInfo_t* binaryInfo; Qnn_ContextBinarySize_t binaryInfoSize; qnnSystemInterface->systemContextGetBinaryInfo(qnnSystemCtxHandle, contextBinaryBuffer, contextBinaryBufferSize, &binaryInfo, &binaryInfoSize); // Extract graph info from QNN binaryInfo, assume only one graph in the context QnnSystemContext_GraphInfo_t* graphInfos = binaryInfo->contextBinaryInfoV1.graphs; QnnSystemContext_GraphInfo_t* graphInfo = &(graphInfos[0]); // Extract tensor info from graphInfo Qnn_Tensor_t* inputs = graphInfo->graphInfoV1.graphInputs; Qnn_Tensor_t* outputs = graphInfo->graphInfoV1.graphOutputs; size_t numInputs = graphInfo->graphInfoV1.numGraphInputs; size_t numOutputs = graphInfo->graphInfoV1.numGraphOutputs; Copy to clipboard #### [Allocating and Configuring IO Memory](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id87) // Qnn_Tensor_t is defined in ${QNN_SDK_ROOT}/include/QNN/QnnTypes.h Qnn_Tensor_t tensors[numTensors]; size_t startAddrAlignment, sizeAlignment // Retrieve buffer start address and size alignment requirements // See ${QNN_SDK_ROOT}/examples/QNN/SampleApp/SampleAppLPAI code for (uint32_t i = 0; i < numTensors; i++) { Qnn_Tensor_t* tensor = &tensors[i]; tensor->v1.memType = QNN_TENSORMEMTYPE_RAW; int dataSize = calculate_tensor_size(qnnTensor->v1); tensor->v1.clientBuf.data = allocate_aligned_memory(startAddrAlignment, sizeAlignment, dataSize); tensor->v1.clientBuf.dataSize = dataSize; } Copy to clipboard #### [Shared Buffers in the LPAI Backend](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id88) In the LPAI backend, *shared buffers* offer an efficient mechanism for moving data between the host CPU and the LPAI accelerator without requiring additional memory copies. Shared buffers allow both domains to reference the same underlying memory, enabling: - **Zero-copy tensor transfers** - **Reduced latency during graph execution** - **Avoidance of redundant CPU-to-accelerator buffer duplication** - **Improved overall memory efficiency** Shared buffers are especially valuable when frequently updating input tensors or retrieving output tensors at high frame rates. The following tutorial explains how to register and use shared buffers within the LPAI backend, covering the required API calls and expected memory constraints: - [Allocate and Use Shared Buffers](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-shared-buffer-tutorial) ### [Memory Lifetime and Allocation Requirements](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id89) - Scratch and persistent memory must be allocated and provided before `QnnGraph_finalize()`. - Persistent memory must remain accessible for the entire lifetime of the LPAI context. - Scratch memory may be replaced dynamically but must always exist. - IO memory must remain valid throughout execution. ### [Recommended Workflow](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id90) 1. Query backend alignment requirements. 2. Query scratch memory size. 3. Query persistent memory size. 4. Allocate aligned memory buffers. 5. Pass scratch and persistent memory to the graph using `QnnGraph_setConfig()`. 6. Call `QnnGraph_finalize()`. 7. Optionally provide user-defined IO buffers. 8. Execute the graph. ### [TCM Memory Support in LPAIBackendExtensions (ADSP Direct Mode)](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id91) The `LPAIBackendExtensions` library supports allocating I/O tensor buffers and the model binary in **Tightly Coupled Memory (TCM)** when running in [ADSP Direct Mode](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#qnn-lpai-direct-mode-backend-type). TCM is fast on-chip memory with lower access latency than main system memory (DDR). By default, buffers are allocated in DDR. When TCM is selected, allocations are served from a fixed on-chip memory pool of up to **2,035,712 bytes** (~1.94 MB). Note TCM memory support is only available in ADSP Direct Mode, with a maximum pool size of **2,035,712 bytes** (~1.94 MB). It is not supported on ARM or x86 simulation platforms. The following `mem_type` values are supported for I/O tensor buffers and the model binary: | `mem_type` value | Description | | --- | --- | | `"ddr"` | **(Default)** Allocates buffers in main system memory (DDR). | | `"tcm"` | Allocates buffers in fast on-chip memory (TCM). Lowest latency; limited to ~1.94 MB total. | #### [Allocation Details](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id92) - **I/O tensor buffers** and **model binary**: allocated in the memory type specified by `mem_type`. - **Scratch and persistent memory**: always allocated in DDR, regardless of the configured `mem_type`. - Memory type cannot be mixed: I/O tensor buffers and the model binary always use the same type. #### [Configuring TCM Memory via JSON](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id93) Set `mem_type` to `"tcm"` in the `lpai_graph/execute` section of `eaiParams_direct.conf`: { "lpai_graph": { "execute": { "mem_type": "tcm" } } } Copy to clipboard Refer to [QNN LPAI Backend Configuration Parameters](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-configuration-parameters) for the full list of supported configuration keys. #### [Invalid `mem_type` Configuration](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id94) If an unrecognized value is provided for `mem_type`, the config parser logs: Invalid memory type Copy to clipboard and resolves the type to `QNN_LPAI_MEM_TYPE_UNDEFINED`. When the allocator encounters this undefined type, it logs: Memory type only supports DDR & TCM Copy to clipboard and returns `NULL`, causing tensor buffer or model binary allocation to fail and triggering an initialization error. Ensure `mem_type` is set to `"ddr"` or `"tcm"`. #### [Testing TCM Memory Support](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id95) ##### Prerequisites - A device with Hexagon ADSP. - QNN SDK version `v6` or later. - An offline-prepared LPAI model binary (`*.serialized.bin`). - Total required TCM memory less than **2,035,712 bytes** (~1.94 MB). - The required libraries and binaries. Refer to the LPAI entry in the [Available QNN SDK Backend libraries](https://docs.qualcomm.com/doc/80-63442-10/topic/backend.html#qnn-sdk-backends-table) section. ##### Prepare the TCM Configuration File Create `eaiParams_direct.conf` with TCM enabled: { "lpai_graph": { "execute": { "mem_type": "tcm" } } } Copy to clipboard Create `eaiParams_direct.json` for `qnn-net-run`: { "backend_extensions": { "shared_library_path": "/data/local/tmp/libQnnLpaiNetRunExtensions.so", "config_file_path": "/data/local/tmp/eaiParams_direct.conf" }, "context_configs": { "is_persistent_binary": true } } Copy to clipboard ##### Run the Model $ ./qnn-net-run \ --input_list model/input_list.txt \ --backend /data/local/tmp/libQnnLpai.so \ --direct_mode adsp \ --config_file model/eaiParams_direct.json \ --retrieve_context model/tmp.bin Copy to clipboard ##### Verify TCM Allocation With `--log_level debug` or higher, the following `QNN_INFO` messages confirm successful pool registration and buffer allocation: TCM pool current size: max_size: Allocate size from tcm pool 0 Copy to clipboard The first message is emitted once when the TCM pool is registered on the initial allocation. The second is printed for each subsequent buffer allocation. If a TCM allocation fails, a `QNN_ERROR` message is emitted: TCM memory allocation failure: required size: Copy to clipboard ##### Limitations and Error Behavior - TCM is only available in **ADSP Direct Mode**; ARM and x86 simulation modes are not supported. - Scratch and persistent memory are always allocated in DDR. - I/O tensor buffers and the model binary always use the same memory type; mixed usage across memory types is not supported. - The TCM pool maximum size is **2,035,712 bytes** (~1.94 MB); there is no dynamic resizing. If the combined size of all I/O tensor buffers and the model binary exceeds this limit, the allocator returns `NULL` and emits `TCM memory allocation failure: required size: `, causing an initialization failure. Reduce model or tensor buffer sizes, or switch `mem_type` to `"ddr"`. - The TCM allocator supports a maximum of **32** individual buffer allocations. Exceeding this limit causes a system fatal error. Reduce the number of individual tensor buffer allocations, or switch `mem_type` to `"ddr"`. - In all failure cases, there is no automatic fallback to DDR; the application must handle the failure explicitly. ## QNN LPAI Data Structures and Enumerations - [QnnBackend\_Property](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnbackend-property-t) - [QnnLpaiBackend\_GetPropertyOption](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaibackend-getpropertyoption-t) - [QnnContext\_Config](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnncontext-config-t) - [QnnContext\_ConfigOption](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnncontext-configoption-t) - [QnnLpaiDevice\_DeviceInfoExtension](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaidevice-deviceinfoextension-t) - [QnnLpaiGraph\_Mem](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-mem-t) - [QnnLpaiMem\_MemType](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaimem-memtype-t) - [QnnGraph\_Config](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnngraph-config-t) - [QnnLpaiGraph\_CustomConfig](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-customconfig-t) - [QnnLpaiGraph\_SetConfigOption](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-setconfigoption-t) - [QnnLpaiBackend\_BufferAlignmentReq](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaibackend-bufferalignmentreq-t) - [QnnLpaiGraph\_CustomProperty](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-customproperty-t) - [QnnLpaiGraph\_GetPropertyOption](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-getpropertyoption-t) - [QnnLpaiGraph\_CoreAffinity](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-coreaffinity-t) - [QnnLpaiGraph\_CoreAffinityType](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-coreaffinitytype-t) - [QnnLpaiGraph\_PerfCfg](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-perfcfg-t) - [QnnLpaiGraph\_ClientPerfType](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-clientperftype-t) - [QnnLpaiGraph\_EnpuPerfCfg](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-enpuperfcfg-t) ### QnnBackend\_Property\_t This structure provides backend property. This data structure is defined in QnnBackend header file present at `/include/QNN/`. | Parameters | Description | | --- | --- | | QnnBackend\_PropertyOption\_t option | Option is used by clients to set or get any backend property. | | QnnBackend\_CustomProperty\_t customProperty | Pointer to the backend property requested by client. | ### QnnLpaiBackend\_GetPropertyOption\_t This enum contains the set of properties supported by the LPAI backend. Objects of this type are to be referenced through `QnnBackend_CustomProperty_t`. This enum is defined in QnnLpaiBackend header file present at `/include/QNN/LPAI/`. | Property | Description | | --- | --- | | QNN\_LPAI\_BACKEND\_GET\_PROP\_ALIGNMENT\_REQ | Used to get the start address alignment and size
alignment requirement of buffers.
Struct: [QnnLpaiBackend\_BufferAlignmentReq\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaibackend-bufferalignmentreq-t) | | QNN\_LPAI\_BACKEND\_GET\_PROP\_REQUIRE\_PERSISTENT\_BINARY | Used to query if cached binary buffer needs to be
persistent until `QnnContext_free` is called. If yes, then
need to specify `QNN_CONTEXT_CONFIG_PERSISTENT_BINARY`
during `QnnContext_createFromBinary` | | QNN\_LPAI\_BACKEND\_GET\_PROP\_UNDEFINED | Unused | ### QnnContext\_Config\_t The [QnnContext\_ConfigOption\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnncontext-configoption-t) structure provides context configuration. This data structure is defined in QnnContext header file present at `/include/QNN/`. | Parameters | Description | | --- | --- | | QnnContext\_ConfigOption\_t option | Provides option to set context configs.
See [QnnContext\_ConfigOption\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnncontext-configoption-t) | | uint8\_t isPersistentBinary | Used with QNN\_CONTEXT\_CONFIG\_PERSISTENT\_BINARY | ### QnnContext\_ConfigOption\_t This enum defines context config options. This enum has multiple options, but the following option is specific to QNN-LPAI BE. This enum is defined in QnnContext header file present at `/include/QNN/`. | Property | Description | | --- | --- | | QNN\_CONTEXT\_CONFIG\_PERSISTENT\_BINARY | Indicates that the context binary pointer is
available during `QnnContext_createFromBinary`
and until `QnnContext_free` is called. | ### QnnLpaiDevice\_DeviceInfoExtension\_t `QnnDevice_getPlatformInfo()` uses this structure to list the supported device features/information. This data structure is defined in QnnLpaiDevice header file present at `/include/QNN/LPAI/` | Parameters | Description | | --- | --- | | uint32\_t socModel | An enum value defined in Qnn Header that represents SoC model | | uint32\_t arch | It shows the architecture of the device | | const char\* domainName | It shows the domain name of the device | ### QnnLpaiGraph\_Mem\_t `QnnGraph_setConfig()` API used this structure to set custom configs for scratch and persistent buffer. This data structure is defined in QnnLpaiGraph header file present at `/include/QNN/LPAI`. | Parameters | Description | | --- | --- | | QnnLpaiMem\_MemType\_t memType | An enum value defined in enum [QnnLpaiMem\_MemType\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaimem-memtype-t)
to memory type of buffer. | | uint32\_t size | Size of buffer | | void\* addr | Pointer to buffer | ### QnnLpaiMem\_MemType\_t This enum contains memory type supported by LPAI backend. This enum is defined in QnnLpaiMem header file present at `/include/QNN/LPAI`. | Property | Description | | --- | --- | | QNN\_LPAI\_MEM\_TYPE\_DDR | Main memory, only available in non-island mode | | QNN\_LPAI\_MEM\_TYPE\_LLC | Last level cache | | QNN\_LPAI\_MEM\_TYPE\_TCM | Tightly coupled memory for hardware | | QNN\_LPAI\_MEM\_TYPE\_UNDEFINED | Unused | ### QnnGraph\_Config\_t This structure provides graph configuration. This data structure is declared in QnnGraph header file present at `/include/QNN/`. | Parameters | Description | | --- | --- | | QnnGraph\_ConfigOption\_t option | An enum value defined in `enum QnnGraph_ConfigOption_t`
to set custom graph configs. | | QnnGraph\_CustomConfig\_t customConfig | Pointer to custom graph configs | ### QnnLpaiGraph\_CustomConfig\_t This structure is used by `QnnGraph_setConfig()` to set backend specific configurations before finalizing the graph. This data structure is declared in QnnLpaiGraph header file present at `/include/QNN/LPAI/`. | Parameters | Description | | --- | --- | | uint32\_t option | An enum value defined in [QnnLpaiGraph\_SetConfigOption\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-setconfigoption-t)
set backend specific configs to graph | | void\* config | Pointer to custom configs | ### QnnLpaiGraph\_SetConfigOption\_t This enum contains custom configs for LPAI backend graph. This enum is defined in QnnLpaiGraph header file present at `/include/QNN/LPAI`. | Property | Description | | --- | --- | | QNN\_LPAI\_GRAPH\_SET\_CFG\_SCRATCH\_MEM | Used to set scratch memory configs. Struct: [QnnLpaiGraph\_Mem\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-mem-t) | | QNN\_LPAI\_GRAPH\_SET\_CFG\_PERSISTENT\_MEM | Used to set persistent memory configs. Struct: [QnnLpaiGraph\_Mem\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-mem-t) | | QNN\_LPAI\_GRAPH\_SET\_CFG\_PERF\_CFG | Used to set custom client perf configs. Struct: [QnnLpaiGraph\_PerfCfg\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-perfcfg-t) | | QNN\_LPAI\_GRAPH\_SET\_CFG\_ENPU\_PERF\_CFG | Used to set eNPU-specific perf configs. Struct: [QnnLpaiGraph\_EnpuPerfCfg\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-enpuperfcfg-t) | | QNN\_LPAI\_GRAPH\_SET\_CFG\_CORE\_AFFINITY | Used to set core affinity configs. Struct: [QnnLpaiGraph\_CoreAffinity\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-coreaffinity-t) | | QNN\_LPAI\_GRAPH\_SET\_CFG\_PAUSE\_EXECUTION | Used to tell release execution resources (clock and bus bandwidth) reserved for the graph
instance. No config struct required (set `config` field to `NULL`). Supported in
non-island mode only. | | QNN\_LPAI\_GRAPH\_SET\_CFG\_RESUME\_EXECUTION | Used to reserve resources (clock and bus bandwidth) required to run the graph instance. No
config struct required (set `config` field to `NULL`). This call will fail if the
system does not have sufficient resources. Executing a paused graph without calling this
first will result in a failure. Supported in non-island mode only. | | QNN\_LPAI\_GRAPH\_SET\_CFG\_BATCH\_MULTIPLE\_SUPPORT | Enables batch-multiple execution, allowing multiple input frames to be processed per
`QnnGraph_execute()` call. No config struct required (set `config` field to `NULL`).
**Must be called before querying persistent memory size** (before
`QNN_LPAI_GRAPH_GET_PROP_PERSISTENT_MEM_SIZE`) so that the returned size accounts for
the additional intermediate arrays. See [Batch-Multiple Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-lpai-batch-support). | | QNN\_LPAI\_GRAPH\_SET\_CFG\_UNDEFINED | Unused | ### QnnLpaiBackend\_BufferAlignmentReq\_t This structure contains parameters needed to align the start address of buffer and size of buffer. This data structure is declared in QnnLpaiBackend header file present at `/include/QNN/LPAI/`. | Parameters | Description | | --- | --- | | uint32\_t startAddrAlignment | Represents start address alignment of buffer. The start address of the
buffer must be startAddrAlignment-byte aligned | | uint32\_t sizeAlignment | Represents buffer size alignment. The allocated buffer must be a
multiple of sizeAlignment bytes | ### QnnLpaiGraph\_CustomProperty\_t This structure is used by `QnnGraph_getProperty()` API to get backend specific configurations. This data structure is defined in QnnLpaiGraph header file present at `/include/QNN/LPAI/`. | Parameters | Description | | --- | --- | | uint32\_t option | An enum value defined in enum [QnnLpaiGraph\_GetPropertyOption\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-getpropertyoption-t)
to retrieve backend specific property. | | void\* property | Pointer to custom property | ### QnnLpaiGraph\_GetPropertyOption\_t This enum contains the set of properties supported by the LPAI backend. Objects of this type are to be referenced through `QnnLpaiGraph_CustomProperty_t`. This enum is defined in QnnLpaiGraph header file present at `/include/QNN/LPAI/`. | Property | Description | | --- | --- | | QNN\_LPAI\_GRAPH\_GET\_PROP\_SCRATCH\_MEM\_SIZE | Get the size requirement of scratch memory | | QNN\_LPAI\_GRAPH\_GET\_PROP\_PERSISTENT\_MEM\_SIZE | Get the size requirement of persistent memory | | QNN\_LPAI\_GRAPH\_GET\_PROP\_UNDEFINED | Unused | ### QnnLpaiGraph\_CoreAffinity\_t This structure is used by `QnnGraph_getProperty()` to get backend specific configurations. This data structure is defined in QnnLpaiGraph header file present at `/include/QNN/LPAI/`. | Parameters | Description | | --- | --- | | QnnLpaiGraph\_CoreAffinityType\_t affinity | Used to set the affinity of selected eNPU core
[QnnLpaiGraph\_CoreAffinityType\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-coreaffinitytype-t) | | uint32\_t coreSelection | Bitmask integer selecting which eNPU core to use at
runtime. `0x01` = core 0, `0x02` = core 1,
`0x00` = any available core.
See [Core Selection & Affinity](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_json_parameters.html#qnn-lpai-core-selection) for guidance. | ### QnnLpaiGraph\_CoreAffinityType\_t This enum contains the possible set of affinities supported by eNPU HW. This enum is defined in QnnLpaiGraph header file present at `/include/QNN/LPAI/`. | Property | Description | | --- | --- | | QNN\_LPAI\_GRAPH\_CORE\_AFFINITY\_SOFT | Used to set affinity to soft.
Struct: [QnnLpaiGraph\_CoreAffinity\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-coreaffinity-t). | | QNN\_LPAI\_GRAPH\_CORE\_AFFINITY\_HARD | Used to set affinity to hard
Struct: [QnnLpaiGraph\_CoreAffinity\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-coreaffinity-t). | | QNN\_LPAI\_GRAPH\_CORE\_AFFINITY\_UNDEFINED | Unused | ### QnnLpaiGraph\_PerfCfg\_t This structure is used to set Client’s performance requirement for eNPU Usage. User can configure it before finalizing the graph. This data structure is declared in QnnLpaiGraph header file present at `/include/QNN/LPAI/`. | Parameters | Description | | --- | --- | | uint32\_t fps | Used to set frame per second (fps) | | uint32\_t ftrtRatio | Used to set FTRT ratio | | QnnLpaiGraph\_ClientPerfType\_t clientType | Used to set client type (Real time or Non-real time)
enum: [QnnLpaiGraph\_ClientPerfType\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-clientperftype-t) | ### QnnLpaiGraph\_ClientPerfType\_t This enum contains the type of client which can be configured by user before finalizing the graph. This data structure is declared in QnnLpaiGraph header file present at `/include/QNN/LPAI/`. | Property | Description | | --- | --- | | QNN\_LPAI\_GRAPH\_CLIENT\_PERF\_TYPE\_REAL\_TIME | Used to set client as REAL TIME.
Struct: [QnnLpaiGraph\_PerfCfg\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-perfcfg-t). | | QNN\_LPAI\_GRAPH\_CLIENT\_PERF\_TYPE\_NON\_REAL\_TIME | Used to set client as NON-REAL TIME
Struct: [QnnLpaiGraph\_PerfCfg\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-perfcfg-t). | | QNN\_LPAI\_GRAPH\_CLIENT\_PERF\_TYPE\_\_UNDEFINED | Unused | ### QnnLpaiGraph\_EnpuPerfCfg\_t This structure is used to set eNPU-specific performance requirements. It provides fine-grained control over the eNPU clock and bandwidth votes, independent of the general [QnnLpaiGraph\_PerfCfg\_t](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnnlpaigraph-perfcfg-t) settings. User can configure it before finalizing the graph. This data structure is declared in QnnLpaiGraph header file present at `/include/QNN/LPAI/`. | Parameters | Description | | --- | --- | | float frame\_rate | Target frame rate for eNPU clock voting (frames per second).
Parsed from config as an integer and cast to float. | | float enpu\_clock\_scale | Multiplicative scale factor applied to the eNPU clock vote.
Parsed from config as an integer and cast to float. | | uint32\_t enpu\_floor\_clock\_level | Minimum (floor) clock level for the eNPU, preventing the clock
from dropping below this level. | | float enpu\_bw\_scale | Multiplicative scale factor applied to the eNPU bandwidth vote.
Parsed from config as an integer and cast to float. | | uint32\_t enpu\_floor\_bw | Minimum (floor) bandwidth in bytes for the eNPU, preventing the
bandwidth vote from dropping below this value. | ## QNN API Call Flow The integration of a QNN model using the LPAI backend follows a structured three-phase process. Each phase is critical to ensuring the model is correctly initialized, executed, and deinitialized within the QNN runtime environment. - [Initialization](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#lpai-initialization) - [Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#lpai-execution) - [Pause and Resume](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#lpai-pause-resume) - [Deinitialization](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#lpai-deinitialization) ## Initialization The initialization phase prepares the QNN runtime and the LPAI backend for model execution. This phase ensures that all required interfaces, memory resources, and configurations are correctly established before inference begins. It consists of the following key steps: 1. **Interface Extraction** Retrieve the necessary interfaces to interact with the QNN runtime and the LPAI backend: - **LPAI Backend Interface** - Use `QnnInterface_getProviders()` to enumerate available backend providers. - Identify the LPAI backend using the backend ID `QNN_LPAI_BACKEND_ID`. - This interface is essential for accessing backend-specific APIs and properties. - **QNN System Interface** - Use `QnnSystemInterface_getProviders()` to obtain system-level interfaces. - Provides APIs for managing contexts, graphs, and binary metadata. 2. **Handle Creation** Create runtime handles to manage backend and system-level resources: - **Backend Handle**: Created using `QnnBackend_create()`, this handle manages backend-specific operations. - **System Context Handle**: Created using `QnnSystemContext_create()`, this handle manages system-level context and graph lifecycle. 3. **Buffer Alignment Query** Query memory alignment requirements to ensure compatibility with the backend: - Use `QnnBackend_getProperty()` with `QNN_LPAI_BACKEND_GET_PROP_ALIGNMENT_REQ`. - Retrieve: - **Start Address Alignment**: Required alignment for buffer base addresses. - **Buffer Size Alignment**: Required alignment for buffer sizes. Proper alignment is critical for correctness on hardware accelerators. 4. **Memory Allocation for Context Binary** Allocate memory for the context binary, ensuring: - Alignment constraints are met. - Memory is allocated from the appropriate pool (e.g., Island or Non-Island memory). 5. **Context Creation from Binary** Instantiate the QNN context using `QnnContext_createFromBinary()`: - The context is immutable and encapsulates the model structure, metadata, and backend configuration. - This step effectively loads the model into the runtime. Platform-specific configuration requirements: - **Island Use Case**: Pass the custom configuration `QNN_LPAI_CONTEXT_SET_CFG_ENABLE_ISLAND` to enable island execution. - **Native ADSP Path**: Use the common configuration `QNN_CONTEXT_CONFIG_PERSISTENT_BINARY` to enable persistent binary support. - **FastRPC Path**: No additional configuration is required. 6. **Graph Metadata Retrieval** Use `QnnSystemContext_getBinaryInfo()` to extract metadata embedded in the binary: - Graph names - Versioning information - Backend-specific metadata 7. **Graph Retrieval** Retrieve the graph handle using `QnnGraph_retrieve()`: - Pass the graph name obtained in the previous step. - The graph handle is used for further configuration and execution. Note The following steps are specific to the Hexagon (aDSP) LPAI backend and are required for proper memory and performance configuration. 8. **Scratch and Persistent Memory Allocation** Query memory requirements using `QnnGraph_getProperty()`: - `QNN_LPAI_GRAPH_GET_PROP_SCRATCH_MEM_SIZE`: Temporary memory used during inference. - `QNN_LPAI_GRAPH_GET_PROP_PERSISTENT_MEM_SIZE`: Memory required across multiple inferences. Allocate memory accordingly, ensuring alignment and memory pool selection. 9. **Memory Configuration** Configure the graph with allocated memory using `QnnGraph_setConfig()`: - `QNN_LPAI_GRAPH_SET_CFG_SCRATCH_MEM` - `QNN_LPAI_GRAPH_SET_CFG_PERSISTENT_MEM` This step binds the allocated memory to the graph for runtime use. See [QNN LPAI Memory Management](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-memory-management) for more details. 10. **Performance and Core Affinity Configuration** Optimize execution by configuring: - **Performance Profile**: `QNN_LPAI_GRAPH_SET_CFG_PERF_CFG` (e.g., balanced, high-performance, low-power) - **Core Affinity**: `QNN_LPAI_GRAPH_SET_CFG_CORE_AFFINITY` (e.g., assign execution to specific DSP cores) These settings help balance performance and power consumption. 11. **Batch-Multiple Execution Configuration** *(optional)* To process multiple input frames per `QnnGraph_execute()` call, enable batch-multiple support **before** querying persistent memory size: - Call `QnnGraph_setConfig()` with `QNN_LPAI_GRAPH_SET_CFG_BATCH_MULTIPLE_SUPPORT`. - No configuration data is required; pass `NULL` for the config field. - This must be done prior to step 12 so that the persistent memory size query accounts for the internal intermediate arrays used during batch slicing. See [QNN LPAI Batch-Multiple Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#qnn-lpai-batch-support) for buffer layout requirements and alignment rules. 12. **Client Priority Configuration** Set the execution priority of the graph using: - `QnnGraph_setConfig(QNN_GRAPH_CONFIG_OPTION_PRIORITY)` This is useful in multi-client or multi-graph environments where scheduling priority matters. 13. **Graph Finalization** Finalize the graph using `QnnGraph_finalize()`: - Locks the graph configuration. - Prepares internal structures for execution. - Must be called before any inference is performed. 14. **Tensor Allocation** Retrieve and prepare input/output tensors: - Use `QnnGraph_getInputTensors()` and `QnnGraph_getOutputTensors()`. - Set tensor type to `QNN_TENSORMEMTYPE_RAW`. - Allocate and bind client buffers to each tensor. Proper tensor setup ensures correct data flow during inference. **LPAI Initialization Call Flow** ![LPAI Initialization Call Flow](data:image/png;base64,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) ## Execution The execution phase is responsible for running inference using the finalized QNN graph. This phase is typically repeated for each inference request and involves the following steps: 1. **Input Buffer Preparation** - Populate the input tensors with data from the client application. - Ensure that the data format, dimensions, and layout match the model’s input specification. - Input tensors must be bound to client-allocated buffers, typically of type `QNN_TENSORMEMTYPE_RAW`. 2. **Graph Execution** - Invoke the model using `QnnGraph_execute()`. - This function triggers the execution of the graph on the target hardware (e.g., eNPU). - By default, execution is **asynchronous** — `QnnGraph_execute()` returns before inference completes. Callers must synchronize before reading output buffers. - To force synchronous (blocking) execution, set `disable_async: true` in the `lpai_private` section of the backend configuration file. **Execution Flow:** - Input data is transferred to the backend. - The backend schedules and executes the graph operations. - Intermediate results are computed and stored in backend-managed memory. - Final outputs are written to the output buffers. 3. **Output Retrieval** - After execution, output tensors contain the inference results. - These results are available in the client-provided output buffers. - The application can now post-process or consume the output data as needed. 4. **Optional: Profiling and Logging** - If profiling is enabled (via –profiling_level), performance data is collected during execution. - Profiling logs are written to the output directory and can be visualized using qnn-profile-viewer. 5. **Error Handling** - Check the return status of `QnnGraph_execute()`. - Handle any runtime errors, such as invalid inputs, memory access violations, or hardware faults. Important - Input and output buffers must remain valid and accessible throughout the execution. - Ensure that memory alignment and size requirements are met to avoid execution failures. **LPAI Execution Call Flow** ![LPAI Execution Call Flow](data:image/png;base64,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) ## Pause and Resume The LPAI backend supports pausing and resuming a finalized graph to temporarily release hardware resources without destroying the graph. When paused, the performance related resources acquired during `QnnGraph_finalize()` are released while the graph and its loaded weights remain valid. When resumed, those resources are re-acquired and the graph is ready to execute again. Note Pause and resume are only supported for graphs compiled in **non-island mode**. The following steps describe the pause and resume flow: 1. **Pause the Graph** - Call `QnnGraph_setConfig()` with `QNN_LPAI_GRAPH_SET_CFG_PAUSE_EXECUTION` to signal the intent to pause. - Call `QnnGraph_finalize()` to apply the change. After finalize completes, the performance related resources are released. 2. **Resume the Graph** - Call `QnnGraph_setConfig()` with `QNN_LPAI_GRAPH_SET_CFG_RESUME_EXECUTION` to signal the intent to resume. - Call `QnnGraph_finalize()` to apply the change. After finalize completes, the performance related resources are re-acquired. 3. **Execute After Resume** - Once the graph is successfully resumed and re-finalized, invoke `QnnGraph_execute()` or `QnnGraph_executeAsync()` as normal. Important - `QnnGraph_finalize()` must be called after each `QnnGraph_setConfig()` for pause or resume to take effect. - Calling `QnnGraph_execute()` on a paused graph without first resuming and re-finalizing will return an error. **LPAI Pause and Resume Call Flow** ![LPAI Pause and Resume Call Flow](data:image/png;base64,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) ## Deinitialization The deinitialization phase is responsible for releasing all resources allocated during the initialization and execution phases. Proper deinitialization ensures that memory is freed, handles are closed, and the system is left in a clean state. This is especially important in embedded or resource-constrained environments. The following steps outline the deinitialization process: 1. **Release QNN Context Handle** - Call `QnnContext_free()` to release the context created via `QnnContext_createFromBinary()`. - This step invalidates the context and all associated graph handles. 2. **Release QNN System Context Handle** - Call `QnnSystemContext_free()` to release the system context. - This step finalizes the system-level interface and releases any associated metadata or configuration. 3. **Release LPAI Backend Handle** - Call `QnnBackend_free()` to release the backend handle created during initialization. - This step ensures that backend-specific resources (e.g., device memory, threads) are properly cleaned up. 4. **Free Scratch and Persistent Memory** - If memory was allocated manually for scratch and persistent buffers (e.g., on Hexagon aDSP), it must be explicitly freed. - These buffers are typically allocated based on properties queried via `QnnGraph_getProperty()`. 5. **Free Input and Output Tensors** - Release memory associated with input and output tensors. - This includes: - Client-allocated buffers bound to tensors - Any metadata or auxiliary structures used for tensor management 6. **Optional: Logging and Diagnostics Cleanup** - If profiling or logging was enabled, ensure that any open file handles or logging streams are closed. - Optionally, flush logs or export profiling data before shutdown. Important - All deinitialization steps must be performed in the reverse order of initialization to avoid resource leaks or undefined behavior. - Failure to properly deinitialize may result in memory leaks, dangling pointers, or device instability. **LPAI Deinitialization Call Flow** ![LPAI Deinitialization Call Flow](data:image/png;base64,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) ## QNN LPAI Batch-Multiple Execution This page describes how to use the LPAI backend to process multiple input frames in a single `QnnGraph_execute()` call. The backend automatically slices the combined input buffer into per-frame regions, executes each frame, and writes results into the corresponding regions of the combined output buffer. - [Overview](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id41) - [Enabling Batch-Multiple Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#enabling-batch-multiple-execution) - [Input Buffer Layout](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#input-buffer-layout) - [Constraints](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#constraints) ### [Overview](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id96) The number of frames to process (the *batch multiplier*) is detected automatically at execute time by comparing the first dimension of each input tensor supplied by the caller against the compiled model’s first dimension. If the caller’s dimension is a multiple of the compiled dimension, that ratio is used as the batch multiplier. All variable-batch inputs must agree on the same multiplier. Inputs whose first dimension matches the compiled value exactly are treated as non-batch inputs and are forwarded unchanged to every frame invocation. This allows the user to provide an input buffer with a larger batch value than the model was originally compiled for. Note This is not the same as supporting a model that is compiled for a batch dimension > 1. ### [Enabling Batch-Multiple Execution](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id97) Batch-multiple support is enabled by a single graph configuration call. This call must be made **before** querying the persistent memory size, because the persistent buffer must include the internal intermediate arrays used during batch slicing. If the order is reversed, the persistent buffer will be undersized and graph finalization will fail. QnnLpaiGraph_CustomConfig_t batchCfg; batchCfg.option = QNN_LPAI_GRAPH_SET_CFG_BATCH_MULTIPLE_SUPPORT; batchCfg.config = NULL; QnnGraph_Config_t graphCfg; graphCfg.option = QNN_GRAPH_CONFIG_OPTION_CUSTOM; graphCfg.customConfig = &batchCfg; QnnGraph_Config_t *cfgPtrs[2] = {0}; cfgPtrs[0] = &graphCfg; QnnGraph_setConfig(graphHandle, (const QnnGraph_Config_t **)cfgPtrs); Copy to clipboard After enabling, query memory sizes, allocate and bind memory, then call `QnnGraph_finalize()` as normal. See [Initialization](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_integration.html#lpai-initialization) for the complete call flow and [QNN LPAI Memory Management](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend_memory_allocations.html#qnn-lpai-memory-management) for memory allocation details. ### [Input Buffer Layout](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id98) Each input tensor is a single contiguous allocation holding all frames back-to-back. The hardware requires each frame to begin at a **256-byte-aligned** address, so the per-frame stride is rounded up to the nearest 256-byte boundary. The total allocation size is the number of frames multiplied by this aligned stride. The diagram below shows the layout for three frames (batch multiplier = 3) where the single-frame size is 300 bytes. The stride rounds up to 512 bytes, giving a total allocation of 1536 bytes: base address (backend start-address aligned) │ ├── [ 0 .. 299] Frame 0 data (300 B) │ [ 300 .. 511] padding (212 B) stride = 512 B ├── [ 512 .. 811] Frame 1 data (300 B) │ [ 812 .. 1023] padding (212 B) stride = 512 B ├── [1024 .. 1323] Frame 2 data (300 B) │ [1324 .. 1535] padding (212 B) stride = 512 B └── [1536] end of allocation stride = ALIGN_UP(singleFrameSize, 256) totalSize = N * stride frame[b] starts at: base + b * stride Copy to clipboard ### [Constraints](https://docs.qualcomm.com/doc/80-63442-10/topic/lpai_backend.html#id99) - Only `QNN_TENSORMEMTYPE_RAW` is supported for batched tensors. - All variable-batch inputs must agree on the same multiplier; a mismatch returns an error. - The input first dimension must be exactly divisible by the compiled first dimension. ## QNN LPAI Shared Buffer Tutorial ### Introduction In the LPAI backend, shared buffers provide an efficient mechanism for exchanging data between the host CPU and the LPAI accelerator without incurring costly memory copies. This tutorial demonstrates how to register and use shared buffers in the LPAI backend to achieve zero-copy data transfers and optimized memory usage across processing domains. ### Supported Shared Memory Type | Qnn\_MemType\_t | Supported | MemInfo Struct | Description | | --- | --- | --- | --- | | QNN\_MEM\_TYPE\_ION | Yes | Qnn\_MemIonInfo\_t | Entire buffer is represented by a single file descriptor. Assumes the buffer starts at the beginning of the fd, no offset handling. | | QNN\_MEM\_TYPE\_CUSTOM | Yes | QnnLpaiMem\_MemInfoCustom\_t | Allows partial mapping of a shared memory region (e.g., multiple buffers share the same fd with different offsets). | | QNN\_MEM\_TYPE\_DMA\_BUF | No | Not Applicable | Not Applicable | Note This tutorial is only focused on the shared buffer usage. There are some prerequisites in the SDK example code not discussed in detail here. Users can refer to the corresponding part in the QNN documentation, or refer to the SampleApp. SampleApp code: ${QNN\_SDK\_ROOT}/examples/QNN/SampleApp/SampleAppLPAI ### Loading prerequisite shared libraries to use the RPCMem framework A hardware device equipped with a Qualcomm chipset includes a shared library which provides the functions for shared buffer manipulation. #### Loading shared library The `libcdsprpc.so` shared library is available on most mainstream Qualcomm chipset equipped devices (SD888 and later). We can dynamically load it as shown below: 1 void* libCdspHandle = dlopen("libcdsprpc.so", RTLD_NOW | RTLD_LOCAL); 2 3 if (nullptr == libCdspHandle) { 4 // handle errors 5 } Copy to clipboard #### Resolving Symbols After the shared library is successfully loaded, we can proceed to resolve all necessary symbols. The below code snippet shows a template to resolve a symbol in a shared library: 1/** 2* Definition: void* rpcmem_alloc(int heapid, uint32 flags, int size); 3* Allocate a buffer via ION and register it with the FastRPC framework. 4* @param[in] heapid Heap ID to use for memory allocation. 5* @param[in] flags ION flags to use for memory allocation. 6* @param[in] size Buffer size to allocate. 7* @return Pointer to the buffer on success; NULL on failure. 8*/ 9typedef void *(*RpcMemAllocFn_t)(int, uint32_t, int); 10 11/** 12* Definition: void rpcmem_free(void* po); 13* Free a buffer and ignore invalid buffers. 14*/ 15typedef void (*RpcMemFreeFn_t)(void *); 16 17/** 18* Definition: int rpcmem_to_fd(void* po); 19* Return an associated file descriptor. 20* @param[in] po Data pointer for an RPCMEM-allocated buffer. 21* @return Buffer file descriptor. 22*/ 23typedef int (*RpcMemToFdFn_t)(void *); 24 25RpcMemAllocFn_t rpcmem_alloc = (RpcMemAllocFn_t)dlsym(libCdspHandle, "rpcmem_alloc"); 26RpcMemFreeFn_t rpcmem_free = (RpcMemFreeFn_t)dlsym(libCdspHandle, "rpcmem_free"); 27RpcMemToFdFn_t rpcmem_to_fd = (RpcMemToFdFn_t)dlsym(libCdspHandle, "rpcmem_to_fd"); 28if (nullptr == rpcmem_alloc || nullptr == rpcmem_free || nullptr == rpcmem_to_fd) { 29 dlclose(libCdspHandle); 30 // handle errors 31} Copy to clipboard ### Data Buffer Alignment Requirement The LPAI backend has requirements on data buffer start address and size alignment. These alignment requirements apply to shared memory buffers. Please refer to the code in `${QNN_SDK_ROOT}/examples/QNN/SampleApp/SampleAppLPAI` for how to query alignment requirements. ### Using QNN\_MEM\_TYPE\_ION with QNN API The following is the representation of ION shared memory, where each tensor has its own shared buffer with its own unique memory pointer, file descriptor, and memory handle. ![../../_static/resources/ION_Shared_Buffer.png](data:image/png;base64,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) An example is shown below: LPAI Shared Buffer Example 1// QnnInterface_t is defined in ${QNN_SDK_ROOT}/include/QNN/QnnInterface.h 2 QnnInterface_t qnnInterface; 3 // Init qnn interface ...... 4 // See ${QNN_SDK_ROOT}/examples/QNN/SampleApp code 5 6 // Qnn_Tensor_t is defined in ${QNN_SDK_ROOT}/include/QNN/QnnTypes.h 7 Qnn_Tensor_t inputTensor; 8 // Set up common setting for inputTensor ...... 9 /* There are 2 specific settings for shared buffer: 10 * 1. memType should be QNN_TENSORMEMTYPE_MEMHANDLE; (line 50) 11 * 2. union member memHandle should be used instead of clientBuf, and it 12 * should be set to nullptr. (line 51) 13 */ 14 15 size_t startAddrAlignment, sizeAlignment; 16 // Retrieve buffer start address and size alignment requirements 17 // See ${QNN_SDK_ROOT}/examples/QNN/SampleApp/SampleAppLPAI code 18 19 #define MAKE_MULTIPLE(i, m) (((i) % (m)) ? ((i) + (m) - ((i) % (m))) : (i)) 20 #define PAD_TO_VALUE(addr, alignment) ((((size_t)addr) + (alignment - 1)) & ~(alignment - 1)) 21 22 size_t bufSize; 23 // Calculate the bufSize base on tensor dimensions and data type ...... 24 bufSize = MAKE_MULTIPLE(bufSize, sizeAlignment); 25 // Make the bufSize aligned to sizeAlignment 26 27 #define RPCMEM_HEAP_ID_SYSTEM 25 28 #define RPCMEM_DEFAULT_FLAGS 1 29 30 // Allocate the shared buffer 31 // Allocate extra memory to accommodate startAddrAlignment requirement 32 uint8_t* memPointer = (uint8_t*)rpcmem_alloc(RPCMEM_HEAP_ID_SYSTEM, RPCMEM_DEFAULT_FLAGS, bufSize + startAddrAlignment); 33 if (nullptr == memPointer) { 34 // handle errors 35 } 36 uint8_t* alignedMemPointer = PAD_TO_VALUE(memPointer, startAddrAlignment); 37 38 // rpcmem_to_fd requires the original (base) pointer returned by rpcmem_alloc, 39 // not the aligned sub-pointer. 40 int memFd = rpcmem_to_fd(memPointer); 41 if (-1 == memFd) { 42 // handle errors 43 } 44 45 // Fill the info of Qnn_MemDescriptor_t and register the buffer to QNN 46 // Qnn_MemDescriptor_t is defined in ${QNN_SDK_ROOT}/include/QNN/QnnMem.h 47 Qnn_MemDescriptor_t memDescriptor = QNN_MEM_DESCRIPTOR_INIT; 48 memDescriptor.memShape = {inputTensor.rank, inputTensor.dimensions, nullptr}; 49 memDescriptor.dataType = inputTensor.dataType; 50 memDescriptor.memType = QNN_MEM_TYPE_ION; 51 memDescriptor.ionInfo.fd = memFd; 52 inputTensor.memType = QNN_TENSORMEMTYPE_MEMHANDLE; 53 inputTensor.memHandle = nullptr; 54 Qnn_ContextHandle_t context; // Must obtain a QNN context handle before memRegister() 55 // To obtain QNN context handle: 56 // Refer to ${QNN_SDK_ROOT}/docs/general/sample_app.html#load-context-from-a-cached-binary 57 Qnn_ErrorHandle_t registRet = qnnInterface->memRegister(context, &memDescriptor, 1u, &(inputTensor.memHandle)); 58 if (QNN_SUCCESS != registRet) { 59 rpcmem_free(memPointer); 60 // handle errors 61 } 62 63 /** 64 * At this place, the allocation and registration of the shared buffer has been complete. 65 * On QNN side, the buffer has been bound by memfd 66 * On user side, this buffer can be manipulated through memPointer. 67 */ 68 69 /** 70 * Optionally, user can also allocate and register shared buffer for output as above codes (lines 22-59). 71 * And if so the output buffer also should be deregistered and freed as below codes (lines 79-83). 72 */ 73 74 // Load the input data to memPointer ...... 75 76 // Execute QNN graph with input tensor and output tensor ...... 77 78 // Get output data ...... 79 80 // Deregister and free all buffers if it's not being used 81 Qnn_ErrorHandle_t deregisterRet = qnnInterface->memDeRegister(&tensors.memHandle, 1); 82 if (QNN_SUCCESS != deregisterRet) { 83 // handle errors 84 } 85 rpcmem_free(memPointer); Copy to clipboard ### Using QNN\_MEM\_TYPE\_CUSTOM with QNN API The following is the representation of a Multi-Tensor shared buffer where a group of tensors is mapped to single shared buffer. This single shared buffer has one memory pointer and a file descriptor; however each tensor has its own memory pointer offset and memory handle. ![../../_static/resources/Multi_Tensor_Shared_Buffer.png](data:image/png;base64,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) An example is shown below: LPAI Multi-Tensor Shared Buffer Example 1// QnnInterface_t is defined in ${QNN_SDK_ROOT}/include/QNN/QnnInterface.h 2 QnnInterface_t qnnInterface; 3 // Init qnn interface ...... 4 // See ${QNN_SDK_ROOT}/examples/QNN/SampleApp code 5 6 // Total number of input tensors 7 size_t numTensors; 8 9 // Qnn_Tensor_t is defined in ${QNN_SDK_ROOT}/include/QNN/QnnTypes.h 10 Qnn_Tensor_t inputTensors[numTensors]; 11 // Set up common setting for inputTensor ...... 12 /* There are 2 specific settings for shared buffer: 13 * 1. memType should be QNN_TENSORMEMTYPE_MEMHANDLE; (line 40) 14 * 2. union member memHandle should be used instead of clientBuf, and it 15 * should be set to nullptr. (line 41) 16 */ 17 18 size_t startAddrAlignment, sizeAlignment; 19 // Retrieve buffer start address and size alignment requirements 20 // See ${QNN_SDK_ROOT}/examples/QNN/SampleApp/SampleAppLPAI code 21 22 #define MAKE_MULTIPLE(i, m) (((i) % (m)) ? ((i) + (m) - ((i) % (m))) : (i)) 23 #define PAD_TO_VALUE(addr, alignment) ((((size_t)addr) + (alignment - 1)) & ~(alignment - 1)) 24 25 // Calculate the shared buffer size 26 uint64_t totalBufferSize = 0; 27 // Calculate the offset of the tensor location in the shared buffer 28 size_t inputTensorOffsets[numTensors]; 29 for (size_t tensorIdx = 0; tensorIdx < numTensors; tensorIdx++) { 30 // Calculate tensorSize: multiply all dimensions and multiply by element size 31 size_t tensorSize = 1; 32 for (uint32_t dim = 0; dim < inputTensors[tensorIdx].rank; dim++) { 33 tensorSize *= inputTensors[tensorIdx].dimensions[dim]; 34 } 35 tensorSize *= sizeof_datatype(inputTensors[tensorIdx].dataType); // user-provided helper 36 inputTensorOffsets[tensorIdx] = totalBufferSize; 37 totalBufferSize += tensorSize; 38 totalBufferSize = MAKE_MULTIPLE(totalBufferSize, sizeAlignment); 39 } 40 41 #define RPCMEM_HEAP_ID_SYSTEM 25 42 #define RPCMEM_DEFAULT_FLAGS 1 43 44 // Allocate the shared buffer 45 uint8_t* memPointer = (uint8_t*)rpcmem_alloc(RPCMEM_HEAP_ID_SYSTEM, RPCMEM_DEFAULT_FLAGS, totalBufferSize + startAddrAlignment); 46 if (nullptr == memPointer) { 47 // handle errors 48 } 49 uint8_t* alignedMemPointer = PAD_TO_VALUE(memPointer, startAddrAlignment); 50 51 // Get a file descriptor for the buffer. 52 // rpcmem_to_fd requires the original (base) pointer returned by rpcmem_alloc. 53 int memFd = rpcmem_to_fd(memPointer); 54 if (-1 == memFd) { 55 // handle errors 56 } 57 58 // Register the memory handles using memory descriptors 59 for (size_t tensorIdx = 0; tensorIdx < numTensors; tensorIdx++) { 60 // Fill the info of Qnn_MemDescriptor_t and register the descriptor to QNN 61 // Qnn_MemDescriptor_t is defined in ${QNN_SDK_ROOT}/include/QNN/QnnMem.h 62 Qnn_MemDescriptor_t memDescriptor; 63 memDescriptor.memShape = {inputTensors[tensorIdx].rank, inputTensors[tensorIdx].dimensions, nullptr}; 64 memDescriptor.dataType = inputTensors[tensorIdx].dataType; 65 memDescriptor.memType = QNN_MEM_TYPE_CUSTOM; 66 inputTensor[tensorIdx].memType = QNN_TENSORMEMTYPE_MEMHANDLE; 67 inputTensor[tensorIdx].memHandle = nullptr; 68 69 // Fill the info of QnnLpaiMem_MemInfoCustom_t and set as custom info 70 // QnnLpaiMem_MemInfoCustom_t is defined in ${QNN_SDK_ROOT}/include/QNN/LPAI/QnnLpaiMem.h 71 QnnLpaiMem_MemInfoCustom_t lpaiCustomMemInfo; 72 lpaiCustomMemInfo.fd = memFd; 73 lpaiCustomMemInfo.offset = inputTensorOffsets[tensorIdx]; 74 75 memDescriptor.customInfo = &lpaiCustomMemInfo; 76 77 Qnn_ContextHandle_t context; // Must obtain a QNN context handle before memRegister() 78 // To obtain QNN context handle: 79 // Refer to ${QNN_SDK_ROOT}/docs/general/sample_app.html#load-context-from-a-cached-binary 80 81 Qnn_ErrorHandle_t registRet = qnnInterface->memRegister(context, &memDescriptor, 1u, &(inputTensor[tensorIdx].memHandle)); 82 if (QNN_SUCCESS != registRet) { 83 // Deregister already created memory handles 84 rpcmem_free(memPointer); 85 // handle errors 86 } 87 } 88 89 /** 90 * At this place, the allocation and registration of the shared buffer has been complete. 91 * On QNN side, the buffer has been bound by memfd 92 * On user side, this buffer can be manipulated through memPointer and offset. 93 */ 94 95 /** 96 * Optionally, user can also allocate and register shared buffer for output as above codes (lines 26-81). 97 * And if so the output buffer also should be deregistered and freed as below codes (lines 101-107). 98 */ 99 100 // Load the input data to memPointer with respective offsets ...... 101 102 // Execute QNN graph with input tensors and output tensors ...... 103 104 // Get output data from the memPointer and offset combination ...... 105 106 // Deregister all mem handles the buffer if it's not being used 107 for (size_t tensorIdx = 0; tensorIdx < numTensors; tensorIdx++) { 108 Qnn_ErrorHandle_t deregisterRet = qnnInterface->memDeRegister(&(inputTensors[tensorIdx].memHandle), 1); 109 if (QNN_SUCCESS != deregisterRet) { 110 // handle errors 111 } 112 } 113 rpcmem_free(memPointer); Copy to clipboard ### Using qnn-net-run with Shared Buffer for Zero-Copy To enable zero-copy IO tensor allocation when running inference with `qnn-net-run`, pass the `--shared_buffer` flag. This instructs the tool to allocate graph input and output tensors as ION shared buffers on Android, enabling direct data exchange between the host CPU and the LPAI accelerator without memory copies. Example: $ ./qnn-net-run \ --backend ./libQnnLpai.so \ --retrieve_context ./qnn_model_serialized.bin \ --input_list ./input_list.txt \ --shared_buffer Copy to clipboard Note `--shared_buffer` is supported on Android only. For more details on this option, refer to qnn-net-run. ## QNN LPAI Op Package The QNN LPAI backend supports custom op packages, enabling users to implement operations not natively supported by the LPAI backend. An LPAI op package is a shared library that implements the QNN Op Package API for the LPAI target. LPAI op packages must be compiled for **two separate targets**: | Target | Platform | Purpose | | --- | --- | --- | | `x86_64-linux-clang` | Host (Linux) | Loaded by QNN tools (e.g. `qnn-context-binary-generator`) during graph compilation | | `hexagon-v79` | Device (Hexagon DSP) | Loaded by the LPAI eAI runtime during inference | Both libraries must be deployed together for a complete LPAI op package. ## Generating a Package Skeleton Use the `qnn-op-package-generator` tool with an XML OpDef configuration file that specifies `LPAI` as the supported backend. The config must declare the backend in the `` elements: CustomRelu ... LPAI Copy to clipboard Run the generator on Linux: qnn-op-package-generator -p CustomReluOpPackageLPAI.xml \ -o Copy to clipboard For more information on the tool and XML schema, see Using the qnn-op-package-generator and XML OpDef Schema Reference. ## Generated Package Structure The generator produces the following directory layout for an LPAI op package: / |-- Makefile |-- makefiles/ | |-- Makefile.linux-x86_64 | |-- Makefile.hexagon-v79 | `-- island/ | |-- uimage_v2.lcs | `-- uimg_dl_v2.c |-- config/ | `-- .xml |-- include/ `-- src/ |-- Interface.c `-- ops/ |-- _compiler.cpp (compiler-side implementation) `-- _inference.c (inference-side implementation) Copy to clipboard - **Makefile**: Top-level makefile with `lpai_x86` and `lpai_hexagon_v79` targets. - **makefiles/Makefile.linux-x86\_64**: Build rules for the host compiler-side library. - **makefiles/Makefile.hexagon-v79**: Build rules for the Hexagon DSP inference-side library, including the island binary variant. - **makefiles/island/**: Island linker script (`uimage_v2.lcs`) and loader stub (`uimg_dl_v2.c`) required to build the `libIsland.so` variant. - **src/<PackageName>Interface.c**: Implements the QNN Op Package interface provider function. The interface file is plain C (`*.c`). - **src/ops/<OpName>\_compiler.cpp**: Compiler-side kernel stub, called on the host during graph compilation. Implement shape inference, op validation, and any host-side setup here. - **src/ops/<OpName>\_inference.c**: Inference-side kernel stub, executed on the Hexagon DSP at runtime. Implement the actual compute kernel here. Written in plain C. Note Inference-side source files use plain C (`*.c`), consistent with the LPAI C runtime. Compiler-side stubs use C++ (`*.cpp`) to interoperate with host-side QNN tooling. ## Infrastructure APIs The LPAI op package infrastructure is defined in: ${QNN_SDK_ROOT}/include/QNN/LPAI/QnnLpaiOpPackageInfrastructure.h ${QNN_SDK_ROOT}/include/QNN/LPAI/QnnLpaiOpPackage.h Copy to clipboard At runtime, the LPAI backend passes a populated `QnnLpaiOpPackage_GlobalInfrastructure_t` to the package `init` function. The inference kernel accesses this struct to inspect the op node and its tensors. **Core Types** | Type | Description | | --- | --- | | `QnnLpai_CustomOpNode_t` | Opaque handle representing an op node at inference time | | `QnnLpai_CustomOpTensor_t` | Opaque handle representing an input, output, or parameter tensor | | `QnnLpaiCustomOp_Error_t` | Return code enum: `LPAI_CUSTOM_OP_SUCCESS`, `LPAI_CUSTOM_OP_FAIL`,
`LPAI_CUSTOM_OP_INVALID_ARGUMENT`, `LPAI_CUSTOM_OP_MEMORY`,
`LPAI_CUSTOM_OP_NOT_SUPPORTED` | | `QnnLpaiCustomOp_DataType_t` | Tensor element type: INT 8/16/32, FLOAT\_32 | | `QnnLpaiCustomOp_Layout_t` | Describes memory layout: `layoutForm`, `layoutOrder`, `layoutStride`,
`layoutDim` (all arrays up to rank `QNN_LPAI_CUSTOM_OP_MAX_LAYOUT_RANK` = 5) | | `QnnLpaiCustomOp_QuantType_t` | Quantization scope: `QNN_LPAI_CUSTOM_OP_QUANT_TYPE_PER_TENSOR` | | `QnnLpaiCustomOp_QuantScale_t` | Scale representation — either floating-point (`fScale`) or integer
approximation (`iScale.scale / 2^iScale.shift`) | | `QnnLpaiCustomOp_PerTensorQuantInfo_t` | Per-tensor quantization: `scale` (`QnnLpaiCustomOp_QuantScale_t`) and
integer `offset` | | `QnnLpaiCustomOp_BufferInfo_t` | Buffer descriptor: `void* buffer` and `uint32_t bufferSize` | **Node Accessor APIs** These function pointers are members of `QnnLpaiOpPackage_GlobalInfrastructure_t` and operate on a `QnnLpai_CustomOpNode_t` received by the execute function. | Function pointer | Description | | --- | --- | | `getNumInputTensors(node)` | Returns the number of input tensors for the node | | `getNumOutputTensors(node)` | Returns the number of output tensors for the node | | `getInputTensor(node, index)` | Returns the input tensor handle at the given index | | `getOutputTensor(node, index)` | Returns the output tensor handle at the given index | | `getParamTensor(node, name)` | Returns the parameter tensor handle with the given null-terminated name | | `getTempBuffer(node, bufferParams)` | Retrieves the temporary scratch buffer pre-allocated during compilation.
`bufferParams` is populated with `buffer` pointer and `bufferSize` | **Tensor Introspection APIs** These function pointers operate on a `QnnLpai_CustomOpTensor_t` handle and return `QnnLpaiCustomOp_Error_t`. | Function pointer | Description | | --- | --- | | `getTensorShapeRank(tensor, rank)` | Retrieves the logical shape rank of the tensor | | `getTensorLayoutRank(tensor, rank)` | Retrieves the memory layout rank of the tensor | | `getTensorShapeDimSize(tensor, index, size)` | Retrieves the size of logical dimension at `index` | | `getTensorLayout(tensor, layout)` | Retrieves the full `QnnLpaiCustomOp_Layout_t` for the tensor | | `getTensorDataType(tensor, dataType)` | Retrieves the `QnnLpaiCustomOp_DataType_t` of the tensor | | `getTensorDataSize(tensor, size)` | Retrieves the element data size in bits | | `getTensorQuantType(tensor, quantType)` | Retrieves the `QnnLpaiCustomOp_QuantType_t` of the tensor | | `getPerTensorQuantParams(tensor, quantParams)` | Retrieves the `QnnLpaiCustomOp_PerTensorQuantInfo_t` (scale + offset) | | `getTensorData(tensor)` | Returns a `void*` pointer to the tensor’s data buffer | **Compiler-side APIs** (`QnnLpaiOpPackage.h`) These function pointer types are registered in `QnnLpaiOpPackage_OperationInfo_t` and are called on the host during graph compilation, not at inference time. | Function pointer type | Description | | --- | --- | | `QnnLpaiOpPackage_Validate_Fn(opConfig)` | Validates the `Qnn_OpConfig_t` for the op. Called during compilation to
confirm the op configuration is legal. Returns `Qnn_ErrorHandle_t`. | | `QnnLpaiOpPackage_GetTempBufferSize_Fn(opConfig, size)` | Returns the size of scratch memory (in bytes) that the inference kernel
requires. The buffer is allocated at runtime and is accessible via
`getTempBuffer`. | | `QnnLpaiOpPackage_GetLayoutSupportFlag_Fn(layoutFlag)` | Returns a bitmask describing the layout constraints the op supports.
`QNN_LPAI_OP_LAYOUT_DEFAULT` (`0`) indicates the default case where
the tensor’s logical shape equals its physical memory layout — no padding
(*bubble*: extra elements inserted between valid data elements for alignment)
and no *CSF* (Compressed Sparse Format: a hardware-specific packed tensor
representation used for activation compression on the eNPU). | **Infrastructure Initializer** Use the provided macro to zero-initialize the struct before populating it: QnnLpaiOpPackage_GlobalInfrastructure_t infra = QNN_LPAI_OP_PACKAGE_GLOBAL_INFRASTRUCTURE_INIT; Copy to clipboard ## Parameter Restrictions Op parameters in an LPAI op package are subject to the following restrictions. Parameters that violate these constraints will be rejected during graph compilation. **Supported data types** Only the following scalar data types are supported for op parameters: | Data type | `Qnn_DataType_t` constant | | --- | --- | | 8-bit signed integer | `QNN_DATATYPE_INT_8` | | 16-bit signed integer | `QNN_DATATYPE_INT_16` | | 32-bit signed integer | `QNN_DATATYPE_INT_32` | | 32-bit float | `QNN_DATATYPE_FLOAT_32` | **Shape and rank** Parameters must be rank-1 (1-D) tensors or scalar (rank-0) values. Multi-dimensional parameter tensors are not supported. **Constant data only** Parameter tensors must carry static (compile-time constant) data. Dynamic or graph-input parameters are not supported. All parameter values must be embedded in the `Qnn_OpConfig_t` at graph construction time and remain unchanged for the lifetime of the compiled context binary. ## Deployment After compilation, deploy both libraries to the target device: | Library | Deploy to | | --- | --- | | `libs/x86_64-linux-clang/lib.so` | Host machine running QNN tools | | `libs/hexagon-v79/lib.so` | Device accessible to the LPAI runtime (standard inference) | | `libs/hexagon-v79/libIsland.so` | Device, only required when island execution is enabled | To register the op package at runtime, pass the library path via `QnnBackend_registerOpPackage` or through the `--op_packages` argument of `qnn-net-run`. ## Island Execution When island execution is enabled the inference kernel runs inside always-resident (island) memory on the Hexagon DSP. This environment is more constrained than the standard DSP execution environment. Op package inference kernels that will execute in island mode must observe the following rules. **Kernel Constraints** - **No print or log statements.** Standard output and logging functions are not available in island mode. Any call to `printf`, `HAP_debug_v2`, or similar logging APIs will cause a fault. Remove all diagnostic output from the inference-side kernel before enabling island execution. - **No dynamic memory allocation.** Heap allocation (`malloc`, `calloc`, `HAP_malloc`, or equivalent) is not supported in island mode. If the kernel requires temporary working memory, declare the required size in the compiler-side `getTempBufferSize` function and access the pre-allocated buffer at runtime via the `getTempBuffer` node accessor. All other working state must use stack variables or static data. **Registering the Island Binary** When island execution is enabled, register **both** the standard hexagon library and the island binary via separate `QnnBackend_registerOpPackage` calls before creating the context: // Standard hexagon library (required for non-island code paths) QnnBackend_registerOpPackage(backend, "libs/hexagon-v79/lib.so", "InterfaceProvider", ""); // Island binary (required when island execution is enabled) QnnBackend_registerOpPackage(backend, "libs/hexagon-v79/libIsland.so", "InterfaceProvider", ""); Copy to clipboard The `target` parameter identifies the island memory pool into which the binary should be loaded. Valid pool names are platform-specific; consult the platform BSP documentation or the Qualcomm platform team for the correct value. Common pool names include `"ADSP_ISLAND"` and `"SENSOR_ISLAND"` on Android-based platforms, but these may differ per SoC. Passing an incorrect pool name will cause the registration to fail with an error at context creation time. When using `qnn-net-run`, supply both entries via `--op_packages` using the colon-separated format `::`: qnn-net-run ... \ --op_packages libs/hexagon-v79/lib.so:InterfaceProvider \ --op_packages libs/hexagon-v79/libIsland.so:InterfaceProvider: Copy to clipboard Note Failing to register the island binary when island mode is active will result in a runtime crash, due to inability to access DDR memory during island mode. ## Troubleshooting for QNN LPAI Backends (x86 Simulator, ARM & aDSP) This section provides a comprehensive guide for executing and troubleshooting QNN LPAI backends across x86 (simulator), ARM (Android), and native aDSP targets. ### Environment Variable Export Commands #### ARM Target (Android) export QNN_TARGET_ARCH=aarch64-android export HW_VER=v6 Copy to clipboard #### aDSP Target (Hexagon DSP) export QNN_TARGET_ARCH=aarch64-android export DSP_ARCH=hexagon-v81 export DSP_VER=V81 export HW_VER=v6 Copy to clipboard #### x86 Simulator (Linux) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${QNN_SDK_ROOT}/lib/x86_64-linux-clang Copy to clipboard #### x86 Simulator (Windows) set PATH=%PATH%;%QNN_SDK_ROOT%\lib\x86_64-windows-msvc Copy to clipboard ### Execution Examples #### x86 Simulator (Linux) From Quantized Model: cd ${QNN_SDK_ROOT}/examples/QNN/converter/models ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-net-run \ --backend ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpai.so \ --model ${QNN_SDK_ROOT}/examples/QNN/example_libs/x86_64-linux-clang/libQnnModel.so \ --input_list input_list_float.txt \ --config_file /path/to/config.json Copy to clipboard From Serialized Buffer: ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-net-run \ --backend ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpai.so \ --retrieve_context qnn_model_8bit_quantized.serialized.bin \ --input_list input_list_float.txt \ --config_file /path/to/config.json Copy to clipboard #### x86 Simulator (Windows) cd %QNN_SDK_ROOT%\examples\QNN\converter\models %QNN_SDK_ROOT%\bin\x86_64-windows-msvc\qnn-net-run.exe ^ --backend %QNN_SDK_ROOT%\lib\x86_64-windows-msvc\QnnLpai.dll ^ --model %QNN_SDK_ROOT%\examples\QNN\example_libs\x86_64-windows-msvc\QnnModel.dll ^ --input_list input_list_float.txt ^ --config_file C:\path\to\config.json Copy to clipboard #### ARM Target (Android) adb shell mkdir -p /data/local/tmp/LPAI/adsp adb push ./output/qnn_model_8bit_quantized.serialized.bin /data/local/tmp/LPAI adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpai.so /data/local/tmp/LPAI adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpaiStub.so /data/local/tmp/LPAI adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnLpaiNetRunExtensions.so /data/local/tmp/LPAI adb push ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpaiSkel.so /data/local/tmp/LPAI/adsp adb push ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_data_float /data/local/tmp/LPAI adb push ${QNN_SDK_ROOT}/examples/QNN/converter/models/input_list_float.txt /data/local/tmp/LPAI adb push ${QNN_SDK_ROOT}/bin/aarch64-android/qnn-net-run /data/local/tmp/LPAI adb shell cd /data/local/tmp/LPAI export LD_LIBRARY_PATH=/data/local/tmp/LPAI:/data/local/tmp/LPAI/adsp export ADSP_LIBRARY_PATH="/data/local/tmp/LPAI/adsp" ./qnn-net-run --backend ./libQnnLpai.so --device_options device_id:0 \ --retrieve_context ./qnn_model_8bit_quantized.serialized.bin \ --input_list ./input_list_float.txt Copy to clipboard #### aDSP Target (Hexagon DSP) adb push ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpai.so /data/local/tmp/LPAI/adsp adb push ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpaiNetRunExtensions.so /data/local/tmp/LPAI/adsp adb push ${QNN_SDK_ROOT}/lib/${DSP_ARCH}/unsigned/libQnnHexagonSkel_App.so /data/local/tmp/LPAI/adsp adb push ${QNN_SDK_ROOT}/lib/${DSP_ARCH}/unsigned/libQnnNetRunDirect${DSP_VER}Skel.so /data/local/tmp/LPAI/adsp adb push ${QNN_SDK_ROOT}/lib/${QNN_TARGET_ARCH}/libQnnNetRunDirect${DSP_VER}Stub.so /data/local/tmp/LPAI export LD_LIBRARY_PATH=/data/local/tmp/LPAI:/data/local/tmp/LPAI/adsp export ADSP_LIBRARY_PATH="/data/local/tmp/LPAI/adsp" Copy to clipboard #### Example config.json The table below shows the differences in config.json for each supported backend type: | **Target** | **shared\_library\_path** | **config\_file\_path** | **context\_configs** | | --- | --- | --- | --- | | Simulator (x86) | ${QNN\_SDK\_ROOT}/lib/x86\_64-linux-clang/libQnnLpaiNetRunExtensions.so | ./lpaiParams.conf | “is\_persistent\_binary”: false | | aDSP (Hexagon) | /data/local/tmp/LPAI/adsp/libQnnLpaiNetRunExtensions.so | ./lpaiParams.conf | “is\_persistent\_binary”: true | | ARM Android | /data/local/tmp/LPAI/libQnnLpaiNetRunExtensions.so | ./lpaiParams.conf | “is\_persistent\_binary”: false | Each configuration should be wrapped in the following structure: { "backend_extensions": { "shared_library_path": "", "config_file_path": "./lpaiParams.conf" }, "context_configs": { "is_persistent_binary": true } } Copy to clipboard ## Troubleshooting Table | **Issue Category** | **Symptoms** | **Resolution & Debugging Commands** | | --- | --- | --- | | Library Not Found or Load Errors |

  • cannot locate shared object file


  • undefined symbol


  • library not found


|

  • Ensure all required .so or .dll files are present in the correct paths.


  • Verify that LD_LIBRARY_PATH (Linux) or PATH (Windows) includes the correct directories.


  • Use ldd (Linux) or Dependency Walker (Windows) to inspect missing dependencies.


    • x86 Linux For model generation and Simulation:


      • ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpai.so


      • ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpaiNetRunExtensions.so


      • ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpaiPrepare_${HW_VER}.so


      • ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpaiSim_${HW_VER}.so




    • x86 Windows For model generation and Simulation:


      • ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpai.dll


      • ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpaiNetRunExtensions.dll


      • ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpaiPrepare_${HW_VER}.dll


      • ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpaiSim_${HW_VER}.dll




    • ARM FastRPC Path:


      • /data/local/tmp/LPAI/libQnnLpai.so


      • /data/local/tmp/LPAI/libQnnLpaiStub.so


      • /data/local/tmp/LPAI/libQnnLpaiNetRunExtensions.so


      • /data/local/tmp/LPAI/adsp/libQnnLpaiSkel.so




    • aDSP for LPAI and Hexagon libraries:


      • /data/local/tmp/LPAI/adsp/libQnnLpai.so


      • /data/local/tmp/LPAI/adsp/libQnnLpaiNetRunExtensions.so


      • /data/local/tmp/LPAI/adsp/libQnnHexagonSkel_App.so


      • /data/local/tmp/LPAI/adsp/libQnnNetRunDirect${DSP_VER}Skel.so


      • /data/local/tmp/LPAI/adsp/libQnnNetRunDirect${DSP_VER}Stub.so






  • Set environment variables:


    • Linux: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${QNN_SDK_ROOT}/lib/x86_64-linux-clang


    • Windows: set PATH=%PATH%;%QNN_SDK_ROOT%/lib/x86_64-windows-msvc


    • Android: export LD_LIBRARY_PATH=/data/local/tmp/LPAI:/data/local/tmp/LPAI/adsp


    • Android: export ADSP_LIBRARY_PATH="/data/local/tmp/LPAI/adsp"




  • Debug commands:


    • ldd qnn-net-run (Linux)


    • Dependency Walker (Windows)


    • adb shell ls /data/local/tmp/LPAI


    • adb shell ls /data/local/tmp/LPAI/adsp


    • readelf -d libQnnLpai.so




| | Context Binary Generator Setup Failure |

  • qnn-context-binary-generator fails to start


  • missing backend or model path


  • missing LPAI Prepare library


|

  • Verify qnn-context-binary-generator binary exists:


    • Linux: ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-context-binary-generator


    • Windows: ${QNN_SDK_ROOT}/bin/x86_64-windows-msvc/qnn-context-binary-generator.exe




  • Verify Prepare library exists:


    • Linux: ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpaiPrepare_${HW_VER}.so


    • Windows: ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpaiPrepare_${HW_VER}.so




  • Check backend and model paths are correct


  • Debug commands:


    • which qnn-context-binary-generator


    • ls -l ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/


    • ls -l ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/




| | Simulator Setup Failure |

  • qnn-net-run fails to start


  • missing backend or model path


  • missing LPAI Simulation library


|

  • Verify qnn-net-run binary exists:


    • Linux: ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-net-run


    • Windows: ${QNN_SDK_ROOT}/bin/x86_64-windows-msvc/qnn-net-run.exe




  • Verify simulation library exists:


    • Linux: ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpaiSim_${HW_VER}.so


    • Windows: ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpaiSim_${HW_VER}.so




  • Check backend and model paths are correct


  • Debug commands:


    • which qnn-net-run


    • ls -l ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/


    • ls -l ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/




| | Incorrect Environment Variables |

  • backend fails to load


  • ADSP libraries not found


|

  • Ensure correct exports are set, see example for v5 (see Supported Platform for more info):


    • export QNN_TARGET_ARCH=aarch64-android


    • export DSP_ARCH=hexagon-v79


    • export DSP_VER=V79


    • export HW_VER=v5




  • Debug commands:


    • echo $QNN_TARGET_ARCH


    • env | grep DSP




| | ELF Format or Architecture Mismatch |

  • Exec format error


  • wrong ELF class


  • no such file (even though the file exists)


|

  • Use file <binary> to inspect architecture compatibility.


    • file libQnnLpai.so → should show correct ELF type for target platform




  • Ensure binaries match target architecture:


    • Simulator (x86 Linux): ELF 64-bit LSB shared object, x86-64


      • ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpai.so


      • ${QNN_SDK_ROOT}/lib/x86_64-linux-clang/libQnnLpaiNetRunExtensions.so


      • ${QNN_SDK_ROOT}/bin/x86_64-linux-clang/qnn-net-run




    • Simulator (x86 Windows): PE32/PE32+ DLLs and EXEs


      • ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/QnnLpai.dll


      • ${QNN_SDK_ROOT}/lib/x86_64-windows-msvc/libQnnLpaiNetRunExtensions.dll


      • ${QNN_SDK_ROOT}/bin/x86_64-windows-msvc/qnn-net-run.exe




    • ARM (Android): ELF 64-bit LSB shared object, ARM aarch64


      • /data/local/tmp/LPAI/libQnnLpai.so


      • /data/local/tmp/LPAI/libQnnLpaiNetRunExtensions.so


      • /data/local/tmp/LPAI/qnn-net-run




    • aDSP (Hexagon): ELF 32-bit LSB shared object, Hexagon


      • /data/local/tmp/LPAI/adsp/libQnnLpai.so


      • /data/local/tmp/LPAI/adsp/libQnnLpaiNetRunExtensions.so






  • Debug commands:


    • readelf -h libQnnLpai.so




| | Unsigned or Improperly Signed Libraries |

  • backend fails silently


  • model fails to execute


|

  • Use Qualcomm signing tools (sectools, sign_hexagon.py) to sign required libraries.


  • Ensure signed libraries are pushed to /data/local/tmp/LPAI/adsp.


  • Sign required libraries using Qualcomm tools:


    • Tools: sectools, sign_hexagon.py




  • For ARM (Android):


    • Sign and push to /data/local/tmp/LPAI/adsp/:


      • ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpaiSkel.so






  • For aDSP (native DSP):


    • Sign and push to /data/local/tmp/LPAI/adsp/:


      • ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpai.so


      • ${QNN_SDK_ROOT}/lib/lpai-${HW_VER}/unsigned/libQnnLpaiNetRunExtensions.so


      • ${QNN_SDK_ROOT}/lib/${DSP_ARCH}/unsigned/libQnnHexagonSkel_App.so


      • ${QNN_SDK_ROOT}/lib/${DSP_ARCH}/unsigned/libQnnNetRunDirect${DSP_VER}Skel.so






  • Debug commands:


    • adb shell ls -l /data/local/tmp/LPAI/adsp/




| | Invalid or Missing Configuration |

  • config.json not found


  • backend extension fails


|

  • Ensure config.json and lpaiParams.conf are present and valid.



  • Validate JSON syntax and required fields

    (shared_library_path, config_file_path, is_persistent_binary).




    • Example config.json:






{
"backend_extensions": {
"shared_library_path": "/data/local/tmp/LPAI/adsp/libQnnLpaiNetRunExtensions.so",
"config_file_path": "./lpaiParams.conf"
}
}
Copy to clipboard | | platform\_config\_file Errors |

  • backend fails at initialization


  • “cannot open platform config” error


  • silent backend initialization failure


|

  • Verify the file path is correct and the file exists:


    • Use an absolute path or a path relative to the tool’s working directory.


    • ls -l /path/to/platform_config.json (Linux)


    • dir C:\path\to\platform_config.json (Windows)




  • Validate the JSON syntax of the platform config file:


    • python3 -m json.tool platform_config.json




  • On Windows, use forward slashes or escaped backslashes in the path:


    • "platform_config_file": "C:/path/to/platform_config.json"


    • "platform_config_file": "C:\\\\path\\\\to\\\\platform_config.json"




| | Core Selection / Prepare Mismatch |

  • execution fails after context load


  • “core not available” or similar error


  • model runs on wrong core or not at all


|

  • Ensure the runtime core_selection bitmask targets a core compiled into the binary.


  • Cross-check enable_core_selection (used at compile time) with core_selection
    (used at runtime):


    • enable_core_selection: "0" at prepare → core_selection: 1 (0x01) at execute ✓


    • enable_core_selection: "0" at prepare → core_selection: 2 (0x02) at execute ✗




  • On single-core platforms, only "0" or omitting enable_core_selection is valid.
    Specifying "1" or "0,1" on a single-core device causes a preparation-time error.


  • Confirm enable_core_selection value is a quoted string, not an integer:


    • Correct: "enable_core_selection": "0,1"


    • Incorrect: "enable_core_selection": 1




| | Model Execution Fails or Incorrect Output |

  • model crashes


  • Output is incorrect or empty


|

  • Verify QNN model was quantized and serialized correctly


  • Ensure input data matches expected format and dimensions.


  • Check for version mismatches between model and runtime.


  • Confirm you don’t see message like: version 4.xx is not supported on runtime 5.xx


  • Debug commands:


    • qnn-net-run --log_level debug <add your other previous options here>


    • adb logcat | grep supported




| | Root Permissions |

  • permission denied errors


  • cannot access /data/local/tmp


|

  • Ensure commands are run with root privileges:


    • Use adb root and adb remount before pushing files


    • Use su or sudo where applicable




  • Debug commands:


    • adb shell whoami


    • ls -l /data/local/tmp




| ## QNN LPAI Backend FAQs **How do I create handles for QNN components?** To initialize QNN components, the following APIs must be used: - `QnnBackend_create()`: Instantiates the LPAI backend handle, which manages backend-specific operations and resources. - `QnnSystemContext_create()`: Creates the QNN system context handle, used to access serialized context binary metadata via `QnnSystemContext_getBinaryInfo()`. These handles are foundational for interacting with the QNN runtime and must be created before any graph execution or profiling. **What does it mean if ``QnnInterface\_getProviders()`` returns zero providers?** A return value of zero providers typically indicates that the backend libraries are either missing, not properly installed, or not discoverable by the runtime. To resolve this issue: - Ensure that the required backend shared libraries (e.g., `libQnnLpai.so`) are present on the target system. - Verify that the environment variable `LD_LIBRARY_PATH` includes the directory containing the QNN backend libraries. - Confirm that the backend ID `QNN_LPAI_BACKEND_ID` is correctly specified when querying providers. **Why is buffer alignment important?** Proper buffer alignment is essential to ensure correct execution and compatibility with the LPAI backend. Misaligned buffers can lead to invalid memory access and runtime errors, especially when interfacing with hardware accelerators that enforce strict alignment constraints. To determine alignment requirements: - Use `QnnBackend_getProperty()` with the property `QNN_LPAI_BACKEND_GET_PROP_ALIGNMENT_REQ`. - This query returns: - **Start Address Alignment**: Specifies the required alignment for the base address of each buffer. - **Buffer Size Alignment**: Specifies the required alignment for the total size of each buffer. **What are the consequences of not meeting alignment requirements?** Failure to comply with alignment constraints may result in: - Application crashes due to invalid or misaligned memory access. - Backend API errors during buffer registration or graph execution. - Incorrect or undefined inference results due to improper memory handling. It is strongly recommended to query and apply alignment requirements before allocating memory for input, output, or intermediate buffers. **Can multiple backends be used concurrently?** No. QNN supports only one backend per context. Each context is tightly coupled with a single backend implementation. To use multiple backends within the same application: - Create separate QNN contexts for each backend. - Ensure that each context is independently initialized and managed. **Can graphs be modified after context finalization?** No. Once a context is created from a binary using `QnnContext_createFromBinary()`, it becomes immutable. This means: - The graph structure, layers, and parameters cannot be modified. - Any changes to the model require regenerating the context binary and reinitializing the context. This immutability ensures consistency and performance optimization during inference. **Is ``QnnGraph\_execute()`` a blocking call?** By default, the LPAI backend runs asynchronously (`disable_async` defaults to `false`), so `QnnGraph_execute()` submits work and returns before execution completes. Callers must synchronize before consuming output buffers. **Synchronization options:** - **Simplest approach**: Set `disable_async: true` in the `lpai_private` backend configuration section (see below). This makes `QnnGraph_execute()` fully blocking and is recommended for most applications. - **Asynchronous operation**: When async mode is required, refer to the SampleApp (`${QNN_SDK_ROOT}/examples/QNN/SampleApp/SampleAppLPAI`) for the platform-appropriate synchronization pattern. To force fully synchronous, blocking behavior, set `disable_async: true` in the `lpai_private` section of the backend configuration file: { "lpai_private": { "disable_async": true } } Copy to clipboard With `disable_async: true`, `QnnGraph_execute()` will not return until the entire graph execution is complete. **Where is the output stored after execution?** Output data is written to the client-provided output buffers that were registered during initialization. These buffers must: - Be properly allocated and aligned according to backend requirements. - Remain valid and accessible throughout the execution lifecycle. The application is responsible for managing the lifecycle and memory of these buffers. **Is the order of deinitialization important?** Yes. Resources must be released in the reverse order of their allocation to avoid dependency violations or memory access errors. Recommended deinitialization order: 1. Release graph and context resources. 2. Destroy the system context handle. 3. Destroy the backend handle. Improper deinitialization may result in memory leaks, dangling pointers, or undefined behavior. **Can a context be reused after deinitialization?** No. Once a context is released using `QnnContext_free()`, it is no longer valid and cannot be reused. - To execute the same model again, the context must be recreated using `QnnContext_createFromBinary()`. - Ensure that all associated resources are reinitialized as needed. **What is ``platform\_config\_file`` and when should I use it?** `platform_config_file` is an optional field in the `lpai_backend` section of the LPAI configuration file. It points to a JSON file that supplies hardware- and platform-specific overrides (e.g., memory layout, clock settings) to the backend, replacing built-in defaults for that parameter. Use it when: - Your target device variant has non-default hardware settings that differ from SDK defaults. - The platform/BSP team has provided a device-specific configuration file. - You need to test different hardware configurations without recompiling the backend. If the file path is incorrect or the file is missing, the backend will fail at initialization with an error indicating the file cannot be opened. Always use absolute paths or paths relative to the working directory of the tool. **What is the difference between ``enable\_core\_selection`` and ``core\_selection``?** These are two separate parameters used at different stages: | Parameter | Section | Type | Purpose | | --- | --- | --- | --- | | `enable_core_selection` | `lpai_graph.prepare` | string
(e.g. `"0,1"`) | Restricts offline compilation to the listed
core(s). Affects the generated binary. | | `core_selection` | `lpai_graph.execute` | integer
(bitmask) | Bitmask selecting which core to use at
runtime (`0x01` = core 0, `0x02` = core 1). | Important The runtime `core_selection` must target a core that was included in `enable_core_selection` at compile time. Requesting a core at runtime that was not compiled into the binary will cause execution to fail. **What does ``disable\_async`` in ``lpai\_private`` do?** Setting `disable_async: true` forces the LPAI backend to execute graphs synchronously, making `QnnGraph_execute()` block until completion. The default is `false` (asynchronous execution). Use synchronous mode when: - Simplifying multi-threaded application logic by eliminating explicit synchronization. - Debugging execution order or timing issues. - Profiling where precise per-call timing is needed. ## QNN LPAI Backend Glossary - LPAI - Low Power AI backend optimized for low-area, low-power applications such as always-on voice and camera use cases. - eNPU - Embedded Neural Processing Unit. The hardware accelerator inside the aDSP that runs LPAI inference. Typically one or two cores per SoC. - aDSP - Audio DSP. The Qualcomm Hexagon DSP subsystem where the eNPU and LPAI runtime execute. Also referred to as the Hexagon DSP. - FastRPC - Fast Remote Procedure Call. The IPC mechanism used by the ARM FastRPC backend to communicate between the host CPU process and the aDSP process. Introduces latency compared to native aDSP Direct Mode. - Island Mode - A low-power, always-on operating mode on the Hexagon DSP where the subsystem runs independently of the main application processor. Island execution has additional memory and API constraints (no printf, no dynamic allocation). - WoS - Windows on Snapdragon. A platform variant running Windows on ARM-based Qualcomm SoCs. Uses the same LPAI backend as Android but with a different deployment workflow (PowerShell, `.dll` libraries). - QNN\_LPAI\_API\_VERSION\_MAJOR - Major version of the QNN LPAI backend API. Current: . - QNN\_LPAI\_API\_VERSION\_MINOR - Minor version of the QNN LPAI backend API. Current: . - QNN\_LPAI\_API\_VERSION\_PATCH - Patch version of the QNN LPAI backend API. Current: . - QNN\_SDK\_ROOT - Environment variable pointing to the root directory of the QNN SDK installation. - LD\_LIBRARY\_PATH - Linux environment variable specifying paths to shared libraries required by QNN tools. - target\_env - Specifies the target environment for model execution. Options: arm, adsp, x86. - enable\_hw\_ver - Specifies the hardware version of the LPAI backend. Options: v5, v5_1, v6. - platform\_config\_file - Optional path (string) in the `lpai_backend` JSON section pointing to a platform-specific configuration file that overrides built-in hardware defaults (e.g., memory layout, clock settings). - enable\_core\_selection - Optional comma-separated string in the `lpai_graph.prepare` JSON section specifying which eNPU core indices (e.g., `"0,1"`) to target during offline compilation. Restricts the generated binary to those cores. - core\_selection - Integer bitmask in the `lpai_graph.execute` JSON section selecting which eNPU core to use at runtime. `0x01` = core 0, `0x02` = core 1, `0x00` = any available core. Must match a core included in `enable_core_selection` at compile time. - disable\_async - Boolean flag in the `lpai_private` JSON section. When `true`, forces `QnnGraph_execute()` to run synchronously (blocking). Default is `false` (asynchronous). - fps - Frames per second setting for model execution. Default: 1. - ftrt\_ratio - Frame-to-real-time ratio. Default: 10. - client\_type - Type of workload. Options: real_time, non_real_time. - affinity - Core affinity policy. Options: soft (prefer selected core, allow fallback), hard (force selected core only). - profiling\_level - Level of profiling detail. Options: basic, detailed. - is\_persistent\_binary - Indicates whether the context binary must remain in memory until `QnnContext_free` is called. Required in Native aDSP Direct Mode. - TCM - Tightly Coupled Memory. Fast on-chip memory on the Hexagon DSP with lower access latency than DDR. Available in aDSP Direct Mode only; maximum pool size ~1.94 MB. - QnnContext\_createFromBinary - API used to create a QNN context from a serialized binary. - QnnGraph\_finalize - API used to finalize a graph before execution. Must be called before any inference. - QnnGraph\_execute - API used to execute a finalized graph. By default asynchronous; set `disable_async: true` for blocking behavior. - QnnContext\_free - API used to release a QNN context. - QnnLpaiMem\_MemType - Enum defining memory types: DDR, LLC, TCM, UNDEFINED. - QnnLpaiGraph\_ClientPerfType - Enum defining client performance types: REAL_TIME, NON_REAL_TIME. - QnnLpaiGraph\_CoreAffinityType - Enum defining core affinity types: SOFT, HARD, UNDEFINED. - frame\_rate - eNPU target frame rate for clock voting (integer). Default: 1. - enpu\_clock\_scale - Multiplicative scale factor applied to the eNPU clock vote (integer). Default: 1. - enpu\_floor\_clock\_level - Minimum eNPU clock level; prevents the clock from being voted below this level (integer). Default: 0. - enpu\_bw\_scale - Multiplicative scale factor applied to the eNPU bandwidth vote (integer). Default: 1. - enpu\_floor\_bw - Minimum eNPU bandwidth in bytes; prevents the bandwidth vote from dropping below this value (integer). Default: 0. - QnnLpaiGraph\_EnpuPerfCfg\_t - Structure providing eNPU-specific clock and bandwidth vote controls, supplementing QnnLpaiGraph\_PerfCfg\_t. - Scratch Memory - Memory used for intermediate results that can be overwritten during execution. Must be allocated before `QnnGraph_finalize()`. - Persistent Memory - Memory used for intermediate results that must persist across operations (e.g., RNN state). Must remain valid until `QnnContext_free()`. - Backend Extension - JSON configuration enabling custom options for LPAI backend tools via `--config_file`. Specifies the extension shared library path and the LPAI parameter config file path. - qnn-net-run - Tool used to execute QNN models on supported platforms. - qnn-context-binary-generator - Tool used to generate offline context binaries for QNN models. - qnn-profile-viewer - Tool used to visualize the profiling data generated by the LPAI backend. - QNN\_CONVERTER - Tool responsible for converting and quantizing models to QNN format. The QNN SDK provides separate converter tools per framework: `qnn-onnx-converter`, `qnn-tensorflow-converter`, `qnn-tflite-converter`, and others. See `${QNN_SDK_ROOT}/bin/x86_64-linux-clang/` for the full list of available converters. - LLC - Last Level Cache. A cache tier on the Qualcomm Hexagon DSP that is larger and slower than TCM but faster than DDR. The LPAI backend can allocate scratch and persistent memory in LLC via `QNN_LPAI_MEM_TYPE_LLC`. Available in aDSP Direct Mode only. - QnnSystemInterface - The system-level QNN interface obtained via `QnnSystemInterface_getProviders()`. Provides APIs for managing context binary metadata and graph lifecycle independently of the backend, including `QnnSystemContext_getBinaryInfo()` for extracting graph names and version data from a serialized binary. Last Published: Aug 06, 2026 [Previous Topic HTA](https://docs.qualcomm.com/bundle/publicresource/80-63442-10/topics/hta_backend.md) [Next Topic CPU](https://docs.qualcomm.com/bundle/publicresource/80-63442-10/topics/cpu_backend.md)