XNNPack
threadをどう使っているの?
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について
MobileNetV2 on RPi 4で、INT8:FP32 = 17ms:44msと高速化している
per-channel
xnn_create_convolution2d_nhwc_qc8などの専用のカーネルがある