XNNPack
threadをどう使っているの?
pthreadpoolを利用
https://github.com/Maratyszcza/pthreadpool
pthreadpool_parallelize_1dなどを提供
1D-6Dのloopについて、#pragma omp parallel forのように並列化できる
xnn_run_operatorでconv2dなどのopを実行するときに、pthreadpoolに計算する範囲を設定している
設定自体は、setup_convolution2d_nhwcのような関数を参照
simdをどう使っているの?
https://scrapbox.io/files/619c7e0a95831d0020e16d9a.png
プラットフォームごとに実装している
wasmsimdは#include <wasm_simd128.h>でwasm_f32x4_addのようなIntrinsicsを呼び出している
Quantizeについて
Faster Quantized Inference with XNNPACK — The TensorFlow Blog
https://github.com/google/XNNPACK#raspberry-pi
MobileNetV2 on RPi 4で、INT8:FP32 = 17ms:44msと高速化している
per-channel
xnn_create_convolution2d_nhwc_qc8などの専用のカーネルがある
https://github.com/tensorflow/tensorflow/blob/e6150fb0bc3282a171fb76697beb2b3b341dead5/tensorflow/lite/delegates/xnnpack/README.md#quantized-operators