30 #include "../performance_parameters.hpp"
31 #include "../std_transforms_fixed.hpp"
36 void a64_gemm_s8_8x12(
const int8_t *,
const int8_t *, int32_t *,
int,
int,
int);
37 void a64_gemm_s8_8x12_a55r1(
const int8_t *,
const int8_t *, int32_t *,
int,
int,
int);
38 void a64_gemm_s8_8x12_x1(
const int8_t *,
const int8_t *, int32_t *,
int,
int,
int);
40 class cls_a64_gemm_s8_8x12 {
42 typedef int8_t operand_type;
43 typedef int32_t result_type;
45 typedef void (*kern_type)(
const int8_t *,
const int8_t *, int32_t *, int, int, int);
48 static unsigned int out_width() {
52 static unsigned int out_height() {
56 static unsigned int k_unroll() {
61 StdTransformsFixed<operand_type, result_type, 8, 12, 4> transforms = {};
62 StdTransformsFixed<operand_type, result_type, 8, 12, 4, true> transforms_quantized = {};
65 static PerformanceParameters get_performance_parameters(
const CPUInfo *
ci) {
66 if (std::is_same<T, int8_t>::value) {
69 return { 19.73, 3.38, 0.27 };
72 return { 15.361, 0.9341, 0.1636 };
75 return { 51.14, 7.38, 0.65 };
78 return { 29.0698, 3.9793, 0.4003 };
82 if (std::is_same<T, int32_t>::value) {
85 return { 19.73, 3.38, 3.70 };
88 return { 14.286, 1.171, 1.209 };
91 return { 61.58, 4.78, 10.83 };
94 return { 31.82, 3.51, 8.03 };
99 kern_type kernel = a64_gemm_s8_8x12;
101 cls_a64_gemm_s8_8x12(
const CPUInfo *
ci) {
104 if (mod == CPUModel::A55r1) {
105 kernel = a64_gemm_s8_8x12_a55r1;
106 }
else if (mod == CPUModel::X1) {
107 kernel = a64_gemm_s8_8x12_x1;
114 #endif // __aarch64__