Docs
{{ g.name }} {{ pg.name }}
Docs/Benchmarks/IQ-9075: iQS-QVADK Multi-stream Scaling

Multi-stream inference scaling on EXEC-Q911 (IQ-9075) across video resolutions

BenchmarkEXEC-Q911iQS-QVADKMulti-stream

This topic describes a multi-stream inference benchmark on the EXEC-Q911 at 720p, 1080p, 2K, and 4K. The purpose is to observe how many channels the platform sustains in real time at each resolution, and what limits it as the channel count increases. The results are not intended to be a general hardware performance ranking.

  • Application: iQS-QVADK v3.0.0 (GStreamer hardware decode → inference → drawing → compositor display)
  • Task: object detection with an INT8 model
  • Input: 720p, 1080p, 2K, and 4K, 30 FPS H.264 video streams
  • Platform: EXEC-Q911 (Qualcomm Dragonwing IQ-9075), BSP v2.5.0
  • Metrics:
    • Output average end-to-end FPS per channel
    • Average CPU loading (%)
    • Average CPU memory usage (%)
    • System power (W) and FPS per watt

Hardware

PlatformEXEC-Q911
SoM / SoCQualcomm Dragonwing IQ-9075
Power planNormal
Processor cores8
AI acceleratorNPU
AI runtimeTFLite 2.16.1 (QNN 2.47.0)
AI performance100 TOPS
Linux kernel6.18.30-01953-g5086fd78561b-dirty (PREEMPT)

AI model

ArchitectureNumerical precisionParametersInput sizeModel sizeModel formatDatasetClasses
YOLO26nINT82.4 M640 × 6402.60 MiBTFLiteInnodisk PPE5

Videos

File typeResolutionFrame rateCodecBitrateFile sizeLength
MP4720p30 FPSH.26415.8 Mbps56.4 MiB30 s
MP41080p30 FPSH.26415.8 Mbps56.4 MiB30 s
MP42K30 FPSH.26415.5 Mbps55.5 MiB30 s
MP44K30 FPSH.26415.4 Mbps55.2 MiB30 s

The four videos were made from one licensed stock video from Envato, and they are not distributed with iQ-Studio. To reproduce the results, license a video and prepare your own copies at each resolution.

The four videos have almost the same bitrate, so only the resolution differs. This bitrate is higher than a typical 720p to 2K camera stream (about 2–8 Mbps), so the results show the load at equal bitrate and may not match a real camera deployment.

Results

Measurement summary

Each channel count was run once for 300 seconds with a 180-second warm-up. CPU and memory are averages over the 120 seconds after warm-up. Power is a single reading of the whole board at the power adapter.

ResolutionChannelsCPU loading (%)Average CPU memory (%)Output average E2E FPS/channelPower (W)FPS/Watt
720p116.55.329.9910.12.97
720p439.07.829.9913.09.23
720p644.28.929.9915.811.39
720p854.010.229.9918.313.11
720p957.110.829.9919.014.21
720p1266.311.729.9820.917.21
720p1675.314.229.9823.220.68
1080p120.15.529.9810.42.88
1080p444.08.129.9914.98.05
1080p652.99.129.9916.910.65
1080p863.711.129.9820.211.87
1080p968.211.829.9821.212.73
1080p1284.613.929.9723.915.05
1080p1695.218.423.5524.815.19
1080p2494.924.215.5425.314.74
2K120.85.729.9810.82.78
2K445.49.229.9916.47.31
2K659.111.229.9823.17.79
2K876.513.329.9822.810.52
2K987.214.829.9724.511.01
2K1297.819.121.7525.110.40
2K1697.723.316.5925.210.53
4K122.56.529.9811.72.56
4K456.411.829.9820.75.79
4K699.116.623.3024.65.68
4K899.620.313.9724.84.51

FPS/Watt = (FPS per channel ÷ power) × channels. 4K stops at 8 channels (decoder limit). For channel counts that are not listed, see Known issues.

fps_per_channel.svg
cpu_loading.svg
cpu_memory.svg
  • The FPS plot (left) shows every resolution holding about 30 FPS per channel at low channel counts, then dropping once the CPU saturates: from 6 channels at 4K, 12 channels at 2K, and 16 channels at 1080p. 720p still holds 30 FPS at 16 channels.
  • The CPU loading plot (middle) shows the FPS drop lining up with CPU loading reaching about 95–99%. NPU utilization stayed below about 50% in every test (for example 4K 8 channels about 14%, 720p 16 channels about 48%), so the CPU, not the NPU, is the bottleneck.
  • The CPU memory plot (right) shows memory usage rising with channel count but staying moderate. It is the system-wide RAM usage, not NPU memory.

Conclusion

On EXEC-Q911 with this workload, near real-time FPS per channel is sustained up to 16 channels at 720p, 12 channels at 1080p, 9 channels at 2K, and 4 channels at 4K. Beyond that, the CPU saturates and per-channel FPS drops. Lower resolutions allow more channels, but the limit is not set by pixel count alone.

Notes

  • Uptime: when the CPU is saturated, results get slower the longer the board has been up (about 11–20% lower after two hours, for example 1080p 16 channels: 22–24 FPS shortly after boot, about 19 FPS after two hours). Runs that are not CPU-limited are not affected. The cause is unknown, so record the uptime when comparing results.
  • Boards: 4K and 2K were measured on one board and 720p and 1080p on another of the same model. Board-to-board variation was not measured.
  • Single run: each point was run once, and power is a manual reading, so small differences are not meaningful.

Known issues

The following issues were observed with iQS-QVADK v3.0.0 on BSP v2.5.0.

  • 720p at 24 and 32 channels and 1080p at 32 channels cannot run (NPU graph memory allocation fails).
  • 1080p at 24 channels and 2K at 16 channels fail intermittently.
  • streampipe crashes once at the end of each run, after the report is printed. The results are not affected.

These issues are under investigation and will be re-tested after fixes.

How to Use

Below is an overview of how we conduct this benchmark on EXEC-Q911. The application runs in a Docker container.

  1. 1
    Install iQ-Studio
    {{ cb1.fname }} bash

    The iQS-QVADK Docker image is not included in the BSP. Pull it first:

    {{ cb2.fname }} bash
  2. 2
    From the repository root on EXEC-Q911, change to the benchmark directory:
    {{ cb3.fname }} bash

    You should see config.json in this directory:

    {{ cb4.fname }} text

    config.json is the config used in the next step. iqs-launcher shares the current directory with the container as /workspace, so the application reads it as /workspace/config.json. The default config runs 1 channel of the 1080p demo video in the image, so you can run the next step as it is. To change the video, the model, or the channel count, see How to change the config.

  3. 3
    Run the benchmark for 300 seconds with a 180-second warm-up. Start it from an SSH session, because programs started from adb or system services are limited to CPU cores 0–3, which lowers the results:
    {{ cb5.fname }} bash

    The application prints the inference time and FPS report when it stops.

  4. 4
    Open a second SSH session. When the application has been running for 180 seconds, measure CPU and memory for 120 seconds. Run this from the directory where you ran git clone:
    {{ cb6.fname }} bash
  5. 5
    (Optional) Around 250 seconds, read the power meter. The platform's power adapter is plugged into a digital power meter (DDSC-728), so the meter shows the power of the whole system.

How to change the config

Open config.json in benchmarks/iq-9075/multi-stream/iqs-qvadk-scaling/ and edit it:

{{ cb7.fname }} bash
config.png
  • Video: the default source_path is videos/adb/ppe/road.mp4, the 1080p demo video in the image. To use your own video, first copy the file to the benchmarks/iq-9075/multi-stream/iqs-qvadk-scaling/ directory on the platform. For example, run this on your PC:
    {{ cb8.fname }} bash

    Then set source_path to /workspace/<file name>, for example /workspace/01_720.mp4. /workspace is the benchmarks/iq-9075/multi-stream/iqs-qvadk-scaling/ directory as seen from inside the container, so the file must be in that directory. Also change width and height (Resolution in the figure) to the resolution of the video:

    Resolutionwidthheight
    720p1280720
    1080p (default)19201080
    2K25601440
    4K38402160
  • Model: the default yolo_model (Model in the figure) is models/tflite/yolo26n_ppe_v73_int8.tflite, which is in the image. To use your own model, copy the file to the benchmarks/iq-9075/multi-stream/iqs-qvadk-scaling/ directory on the platform in the same way, and set yolo_model to /workspace/<file name>.
  • Channel count: the streams array has 1 entry (the { ... } block in the figure), which is 1 channel. Copy the whole block and paste it after itself, separated by a comma, until the array has the channel count you want to test (for example 4, 8, or 16 entries). Every channel uses the same video.
Note: The only video we provide is the 1080p demo video in the image. The videos used in this report are not distributed, so you need to prepare the videos for the other resolutions yourself. Results with other videos differ from this report; to compare, use a 30-second H.264 video at about 15.5 Mbps and 30 FPS.
You are here {{ railNum }}/ {{ railTotal }} {{ railPct }}