commit | 534375deac3e6fc1ce7ffcdec951570c38df812f | [log] [tgz] |
---|---|---|
author | Frank Barchard <fbarchard@google.com> | Wed Jan 15 19:22:41 2020 -0800 |
committer | XNNPACK Team <xnnpack-github-robot@google.com> | Wed Jan 15 19:23:18 2020 -0800 |
tree | bc3a52b5c5ab64315ffa79d0c679f7ef017f9c3e | |
parent | c03b2bda936a5053889f56b687343a5be404ce6b [diff] |
A53 GEMM / IGEMM kernel prefetches adjust by 1 The x5 register used for weights advances by 1 cache line... 64 bytes in most kernels, and 96 bytes in 4x12. But the prefetch offsets dont account for this, and skip a cache line. Adjust offsets by 1 cache line 4x12 consumes 192 bytes - 3 cache lines, so do 3 prefetches. End To End was f32_gemm_4x12__aarch64_neonfma_cortex_a53/mobilenet_v2/real_time 109863 us 4x12 is submitted f32_gemm_6x8__aarch64_neonfma_cortex_a53/mobilenet_v2/real_time 96928 us f32_gemm_4x8__aarch64_neonfma_cortex_a53/mobilenet_v2/real_time 106907 us Now f32_gemm_6x8__aarch64_neonfma_cortex_a53/mobilenet_v2/real_time 95999 us f32_gemm_4x12__aarch64_neonfma_cortex_a53/mobilenet_v2/real_time 102843 us f32_gemm_4x8__aarch64_neonfma_cortex_a53/mobilenet_v2/real_time 104823 us PiperOrigin-RevId: 289984651
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 and researchers; instead it provides low-level performance primitives for accelerating high-level machine learning frameworks, such as MediaPipe, TensorFlow Lite, and TensorFlow.js.
XNNPACK implements the following neural network operators:
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 three generations of MobileNet models and three generations of Pixel phones.
Model | Pixel, ms | Pixel 2, ms | Pixel 3a, ms |
---|---|---|---|
MobileNet v1 1.0X | 81 | 89 | 88 |
MobileNet v2 1.0X | 48 | 55 | 54 |
MobileNet v3 Large | 40 | 44 | 44 |
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 |
---|---|---|---|
MobileNet v1 1.0X | 45 | 27 | 46 |
MobileNet v2 1.0X | 28 | 18 | 28 |
MobileNet v3 Large | 23 | 16 | 24 |
MobileNet v3 Small | 7 | 6 | 8 |
Benchmarked on January 9, 2020 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.
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 2 (BCM2836), ms | RPi 3+ (BCM2837B0), ms | RPi 4 (BCM2711), ms |
---|---|---|---|
MobileNet v1 1.0X | 380 | 115 | 76 |
MobileNet v2 1.0X | 217 | 80 | 45 |
MobileNet v3 Large | 180 | 67 | 41 |
MobileNet v3 Small | 57 | 23 | 15 |
Benchmarked on January 9, 2020 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.
XNNPACK is a based on QNNPACK library. Unlike QNNPACK, XNNPACK focuses entirely on floating-point operators, and its API is no longer compatible with QNNPACK.