unplugged-system/external/XNNPACK
2025-10-06 13:59:42 +00:00
..
.github/workflows Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
bench Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
cmake Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
doc Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
eval Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
include Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
models Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
scripts Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
src Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
test Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
third_party Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
tools Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
.bazelrc Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
.clang-format Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
.gitignore Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
Android.bp Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
build_defs.bzl Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
BUILD.bazel Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
CMakeLists.txt Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
CONTRIBUTING.md Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
emscripten.bzl Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
LICENSE Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
METADATA Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
MODULE_LICENSE_BSD Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
OWNERS Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
preamble.js.lds Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
README.md Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
TEST_MAPPING Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
WORKSPACE Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00

XNNPACK

XNNPACK is a highly optimized library of floating-point neural network inference operators for ARM, WebAssembly, and x86 platforms. XNNPACK is not intended for direct use by deep learning practitioners and researchers; instead it provides low-level performance primitives for accelerating high-level machine learning frameworks, such as TensorFlow Lite, TensorFlow.js, PyTorch, and MediaPipe.

Supported Architectures

  • ARM64 on Android, Linux, macOS, and iOS (including WatchOS and tvOS)
  • ARMv7 (with NEON) on Android
  • ARMv6 (with VFPv2) on Linux
  • x86 and x86-64 (up to AVX512) on Windows, Linux, macOS, Android, and iOS simulator
  • WebAssembly MVP
  • WebAssembly SIMD
  • RISC-V (RV32GV and RV64GC)

Operator Coverage

XNNPACK implements the following neural network operators:

  • 2D Convolution (including grouped and depthwise)
  • 2D Deconvolution (AKA Transposed Convolution)
  • 2D Average Pooling
  • 2D Max Pooling
  • 2D ArgMax Pooling (Max Pooling + indices)
  • 2D Unpooling
  • 2D Bilinear Resize
  • 2D Depth-to-Space (AKA Pixel Shuffle)
  • Add (including broadcasting, two inputs only)
  • Subtract (including broadcasting)
  • Divide (including broadcasting)
  • Maximum (including broadcasting)
  • Minimum (including broadcasting)
  • Multiply (including broadcasting)
  • Squared Difference (including broadcasting)
  • Global Average Pooling
  • Channel Shuffle
  • Fully Connected
  • Abs (absolute value)
  • Bankers' Rounding (rounding to nearest, ties to even)
  • Ceiling (rounding to integer above)
  • Clamp (includes ReLU and ReLU6)
  • Convert (includes fixed-point and half-precision quantization and dequantization)
  • Copy
  • ELU
  • Floor (rounding to integer below)
  • HardSwish
  • Leaky ReLU
  • Negate
  • Sigmoid
  • Softmax
  • Square
  • Transpose
  • Truncation (rounding to integer towards zero)
  • PReLU

All operators in XNNPACK support NHWC layout, but additionally allow custom stride along the Channel dimension. Thus, operators can consume a subset of channels in the input tensor, and produce a subset of channels in the output tensor, providing a zero-cost Channel Split and Channel Concatenation operations.

Performance

Mobile phones

The table below presents single-threaded performance of XNNPACK library on three generations of MobileNet models and three generations of Pixel phones.

Model Pixel, ms Pixel 2, ms Pixel 3a, ms
FP32 MobileNet v1 1.0X 82 86 88
FP32 MobileNet v2 1.0X 49 53 55
FP32 MobileNet v3 Large 39 42 44
FP32 MobileNet v3 Small 12 14 14

The following table presents multi-threaded (using as many threads as there are big cores) performance of XNNPACK library on three generations of MobileNet models and three generations of Pixel phones.

Model Pixel, ms Pixel 2, ms Pixel 3a, ms
FP32 MobileNet v1 1.0X 43 27 46
FP32 MobileNet v2 1.0X 26 18 28
FP32 MobileNet v3 Large 22 16 24
FP32 MobileNet v3 Small 7 6 8

Benchmarked on March 27, 2020 with end2end_bench --benchmark_min_time=5 on an Android/ARM64 build with Android NDK r21 (bazel build -c opt --config android_arm64 :end2end_bench) and neural network models with randomized weights and inputs.

Raspberry Pi

The table below presents multi-threaded performance of XNNPACK library on three generations of MobileNet models and three generations of Raspberry Pi boards.

Model RPi Zero W (BCM2835), ms RPi 2 (BCM2836), ms RPi 3+ (BCM2837B0), ms RPi 4 (BCM2711), ms RPi 4 (BCM2711, ARM64), ms
FP32 MobileNet v1 1.0X 3919 302 114 72 77
FP32 MobileNet v2 1.0X 1987 191 79 41 46
FP32 MobileNet v3 Large 1658 161 67 38 40
FP32 MobileNet v3 Small 474 50 22 13 15
INT8 MobileNet v1 1.0X 2589 128 46 29 24
INT8 MobileNet v2 1.0X 1495 82 30 20 17

Benchmarked on Feb 8, 2022 with end2end-bench --benchmark_min_time=5 on a Raspbian Buster build with CMake (./scripts/build-local.sh) and neural network models with randomized weights and inputs. INT8 inference was evaluated on per-channel quantization schema.

Publications

Ecosystem

Machine Learning Frameworks

Acknowledgements

XNNPACK is a based on QNNPACK library. Over time its codebase diverged a lot, and XNNPACK API is no longer compatible with QNNPACK.