onnxruntime
00b345eb - ARM Neon S8S8 kernel for QGemm (#8695)

Commit
4 years ago
ARM Neon S8S8 kernel for QGemm (#8695) Using signed int, qgemm kernel avoids extending uint8 to int16 while computing matrix multiplication, achieving higher performance. We also find that by using only lower 64b of vector registers to load A and B matrix, we can get further performance improvements. We also experimented with using ldp to load two 64b in one shot, vs using two ldr to load one 64b at a time, in both Big and little cores, there is no noticeable differences. Submitting the LDP version. At this point we don't need to choose kernel based on micro-architecture. Inference time of resnet50, thread count 2 Big Core on Pixel 3a Current master: 292.947 ms First iteration S8S8: 188.239 ms LDP load two 64b reg: 178.715 ms LDR load one 64b reg: 179.536 ms Little Core Master: 546.317 ms S8S8: 513.332 ms LDP: 489.19 ms LDR: 497.865 ms Raspberry Pi 3B+ Master: 660.08 ms S8S8: 608.577 ms LDP: 603.675 ms LDR 602.075 ms
Author
Parents
Loading