Skip to content
High-efficiency floating-point neural network inference operators for mobile and Web
C++ C Assembly Python Other
Branch: master
Clone or download
fbarchard and xnnpack-bot 6x8 and a53 kernel comments.
PiperOrigin-RevId: 275402313
Latest commit 459c9fc Oct 17, 2019


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

Supported Architectures

  • ARM64 on Android and Linux
  • ARM on Android
  • WebAssembly MVP
  • WebAssembly SIMD (experimental)
  • x86 and x86-64 (up to SSE2 only) on Android, Linux, and macOS

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
  • Add (tensors of same shape)
  • Global Average Pooling
  • Channel Shuffle
  • Fully Connected
  • Clamp (includes ReLU and ReLU6)
  • HardSwish
  • 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.


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

Model Pixel, ms Pixel 2, ms Pixel 3a, ms
MobileNet v1 1.0X 81 93 88
MobileNet v2 1.0X 48 58 54

Benchmarked on October 9, 2019 with end2end_bench --benchmark_min_time=5 on an Android/ARM64 build (bazel build -c opt --config android_arm64 :end2end_bench) and neural network models with randomized weights and inputs.



XNNPACK is a based on QNNPACK library. However, unlike QNNPACK, XNNPACK focuses entirely on floating-point operators, and its API is no longer compatible with QNNPACK.

You can’t perform that action at this time.