Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

Google XNNPackの実装

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

GoogleのXNNPackについては、このブログでも2回取り上げています。

vengineer.hatenablog.com

vengineer.hatenablog.com

で、実装を眺めてみました。f32-gemm です。

ここ にいろいろなファイルがありますね。ベンチマーク も。

4x8 の実装は、aarch32 で5種類、aarch64 で6種類もありますね。

  • aarch32 neon-ld64
  • aarch32 neon-cortex-a53
  • aarch32 neon-cortex-a55
  • aarch32 neon-cortex-a57
  • aarch32 neon-cortex-a75
  • aarch64 neonfma-ld64
  • aarch64 neonfma-ld128
  • aarch64 neon-cortex-a53
  • aarch64 neon-cortex-a55
  • aarch64 neon-cortex-a57
  • aarch64 neon-cortex-a75

Intelのライブラリのように、各Opに対して各CPUアーキテクチャに合ったコードがあるのね。。。

 この commit では、

4x8 GEMM and IGEMM microkernels for Cortex A55. 7.8% faster for e2e mobile net v2.

Was f32_gemm_4x8__aarch64_neonfma_cortex_a53/mobilenet_v2/real_time 132632 us
Now f32_gemm_4x8__aarch64_neonfma_cortex_a55/mobilenet_v2/real_time 123029 us

The rev 1 version of Cortex A55 can co-issue a 64 bit
vector load with each FMA, so re-arrange the Cortex-A53
microkernel with 3 FMA paired with 2 loads and INS.

とありました。

地道な改善。。。