1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2022 Google LLC
2*4bdc9457SAndroid Build Coastguard Worker //
3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
5*4bdc9457SAndroid Build Coastguard Worker
6*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
7*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/operator.h>
8*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/params.h>
9*4bdc9457SAndroid Build Coastguard Worker #include <gtest/gtest.h>
10*4bdc9457SAndroid Build Coastguard Worker
TEST(COMPUTE_CONVOLUTION_OUTPUT_DMENSION,compute)11*4bdc9457SAndroid Build Coastguard Worker TEST(COMPUTE_CONVOLUTION_OUTPUT_DMENSION, compute) {
12*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_compute_convolution_output_dimension(5, 3, 1, 1), 3);
13*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_compute_convolution_output_dimension(10, 3, 2, 1), 6);
14*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(xnn_compute_convolution_output_dimension(5, 3, 1, 2), 2);
15*4bdc9457SAndroid Build Coastguard Worker }
16*4bdc9457SAndroid Build Coastguard Worker
17*4bdc9457SAndroid Build Coastguard Worker namespace {
18*4bdc9457SAndroid Build Coastguard Worker // A dummy, nop microkernel for testing.
dummy_gemm(size_t mr,size_t nr,size_t k,const void * a,size_t a_stride,const void * w,void * c,size_t cm_stride,size_t cn_stride,const void * params)19*4bdc9457SAndroid Build Coastguard Worker void dummy_gemm(size_t mr, size_t nr, size_t k, const void *a, size_t a_stride,
20*4bdc9457SAndroid Build Coastguard Worker const void *w, void *c, size_t cm_stride, size_t cn_stride,
21*4bdc9457SAndroid Build Coastguard Worker const void *params) {}
22*4bdc9457SAndroid Build Coastguard Worker xnn_hmp_gemm_ukernel empty_gemm_ukernel = {};
23*4bdc9457SAndroid Build Coastguard Worker xnn_hmp_gemm_ukernel dummy_gemm_ukernel = xnn_init_hmp_gemm_ukernel(dummy_gemm);
24*4bdc9457SAndroid Build Coastguard Worker
dummy_igemm(size_t mr,size_t nr,size_t kc,size_t ks,const void ** a,const void * w,void * c,size_t cm_stride,size_t cn_stride,size_t a_offset,const void * zero,const void * params)25*4bdc9457SAndroid Build Coastguard Worker void dummy_igemm(size_t mr, size_t nr, size_t kc, size_t ks, const void **a,
26*4bdc9457SAndroid Build Coastguard Worker const void *w, void *c, size_t cm_stride, size_t cn_stride,
27*4bdc9457SAndroid Build Coastguard Worker size_t a_offset, const void *zero, const void *params) {}
28*4bdc9457SAndroid Build Coastguard Worker xnn_hmp_igemm_ukernel empty_igemm_ukernel = {};
29*4bdc9457SAndroid Build Coastguard Worker xnn_hmp_igemm_ukernel dummy_igemm_ukernel = xnn_init_hmp_igemm_ukernel(dummy_igemm);
30*4bdc9457SAndroid Build Coastguard Worker } // namespace
31*4bdc9457SAndroid Build Coastguard Worker
TEST(HEURISTIC_MR,batch_size_same_as_mr)32*4bdc9457SAndroid Build Coastguard Worker TEST(HEURISTIC_MR, batch_size_same_as_mr) {
33*4bdc9457SAndroid Build Coastguard Worker gemm_parameters params = {
34*4bdc9457SAndroid Build Coastguard Worker .minmax = {
35*4bdc9457SAndroid Build Coastguard Worker .gemm = {
36*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
37*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
38*4bdc9457SAndroid Build Coastguard Worker },
39*4bdc9457SAndroid Build Coastguard Worker .igemm = {
40*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
41*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
42*4bdc9457SAndroid Build Coastguard Worker },
43*4bdc9457SAndroid Build Coastguard Worker },
44*4bdc9457SAndroid Build Coastguard Worker .mr = 2,
45*4bdc9457SAndroid Build Coastguard Worker .nr = 8,
46*4bdc9457SAndroid Build Coastguard Worker };
47*4bdc9457SAndroid Build Coastguard Worker
48*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(2, xnn_get_heuristic_mr_gemm(2, params.mr, params.nr, params.minmax.gemm));
49*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(2, xnn_get_heuristic_mr_igemm(2, params.mr, params.nr, params.minmax.igemm));
50*4bdc9457SAndroid Build Coastguard Worker
51*4bdc9457SAndroid Build Coastguard Worker params = (gemm_parameters) {
52*4bdc9457SAndroid Build Coastguard Worker .minmax = {
53*4bdc9457SAndroid Build Coastguard Worker .gemm = {
54*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
55*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
56*4bdc9457SAndroid Build Coastguard Worker empty_gemm_ukernel,
57*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel
58*4bdc9457SAndroid Build Coastguard Worker },
59*4bdc9457SAndroid Build Coastguard Worker .igemm = {
60*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
61*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
62*4bdc9457SAndroid Build Coastguard Worker empty_igemm_ukernel,
63*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel
64*4bdc9457SAndroid Build Coastguard Worker },
65*4bdc9457SAndroid Build Coastguard Worker },
66*4bdc9457SAndroid Build Coastguard Worker .mr = 4,
67*4bdc9457SAndroid Build Coastguard Worker .nr = 8,
68*4bdc9457SAndroid Build Coastguard Worker };
69*4bdc9457SAndroid Build Coastguard Worker
70*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_gemm(4, params.mr, params.nr, params.minmax.gemm));
71*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_igemm(4, params.mr, params.nr, params.minmax.igemm));
72*4bdc9457SAndroid Build Coastguard Worker }
73*4bdc9457SAndroid Build Coastguard Worker
TEST(HEURISTIC_MR,batch_size_smaller_than_mr)74*4bdc9457SAndroid Build Coastguard Worker TEST(HEURISTIC_MR, batch_size_smaller_than_mr) {
75*4bdc9457SAndroid Build Coastguard Worker gemm_parameters params = {
76*4bdc9457SAndroid Build Coastguard Worker .minmax = {
77*4bdc9457SAndroid Build Coastguard Worker .gemm = {
78*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
79*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
80*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
81*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
82*4bdc9457SAndroid Build Coastguard Worker },
83*4bdc9457SAndroid Build Coastguard Worker .igemm = {
84*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
85*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
86*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
87*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
88*4bdc9457SAndroid Build Coastguard Worker },
89*4bdc9457SAndroid Build Coastguard Worker },
90*4bdc9457SAndroid Build Coastguard Worker .mr = 4,
91*4bdc9457SAndroid Build Coastguard Worker .nr = 8,
92*4bdc9457SAndroid Build Coastguard Worker };
93*4bdc9457SAndroid Build Coastguard Worker
94*4bdc9457SAndroid Build Coastguard Worker // batch size == 3 < mr == 4, pick smallest available kernel to minimize clamps.
95*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(3, xnn_get_heuristic_mr_gemm(3, params.mr, params.nr, params.minmax.gemm));
96*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(3, xnn_get_heuristic_mr_igemm(3, params.mr, params.nr, params.minmax.igemm));
97*4bdc9457SAndroid Build Coastguard Worker
98*4bdc9457SAndroid Build Coastguard Worker params = (gemm_parameters) {
99*4bdc9457SAndroid Build Coastguard Worker .minmax = {
100*4bdc9457SAndroid Build Coastguard Worker .gemm = {
101*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
102*4bdc9457SAndroid Build Coastguard Worker empty_gemm_ukernel,
103*4bdc9457SAndroid Build Coastguard Worker empty_gemm_ukernel,
104*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
105*4bdc9457SAndroid Build Coastguard Worker },
106*4bdc9457SAndroid Build Coastguard Worker .igemm = {
107*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
108*4bdc9457SAndroid Build Coastguard Worker empty_igemm_ukernel,
109*4bdc9457SAndroid Build Coastguard Worker empty_igemm_ukernel,
110*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
111*4bdc9457SAndroid Build Coastguard Worker },
112*4bdc9457SAndroid Build Coastguard Worker },
113*4bdc9457SAndroid Build Coastguard Worker .mr = 4,
114*4bdc9457SAndroid Build Coastguard Worker .nr = 8,
115*4bdc9457SAndroid Build Coastguard Worker };
116*4bdc9457SAndroid Build Coastguard Worker
117*4bdc9457SAndroid Build Coastguard Worker // The only kernel with mr < 2 is mr == 1, which is too inefficient for this batch size 2.
118*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_gemm(2, params.mr, params.nr, params.minmax.gemm));
119*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_igemm(2, params.mr, params.nr, params.minmax.igemm));
120*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(1, xnn_get_heuristic_mr_gemm(1, params.mr, params.nr, params.minmax.gemm));
121*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(1, xnn_get_heuristic_mr_igemm(1, params.mr, params.nr, params.minmax.igemm));
122*4bdc9457SAndroid Build Coastguard Worker
123*4bdc9457SAndroid Build Coastguard Worker params = (gemm_parameters) {
124*4bdc9457SAndroid Build Coastguard Worker .minmax = {
125*4bdc9457SAndroid Build Coastguard Worker .gemm = {
126*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
127*4bdc9457SAndroid Build Coastguard Worker empty_gemm_ukernel,
128*4bdc9457SAndroid Build Coastguard Worker empty_gemm_ukernel,
129*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
130*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
131*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
132*4bdc9457SAndroid Build Coastguard Worker },
133*4bdc9457SAndroid Build Coastguard Worker .igemm = {
134*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
135*4bdc9457SAndroid Build Coastguard Worker empty_igemm_ukernel,
136*4bdc9457SAndroid Build Coastguard Worker empty_igemm_ukernel,
137*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
138*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
139*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
140*4bdc9457SAndroid Build Coastguard Worker },
141*4bdc9457SAndroid Build Coastguard Worker },
142*4bdc9457SAndroid Build Coastguard Worker .mr = 6,
143*4bdc9457SAndroid Build Coastguard Worker .nr = 8,
144*4bdc9457SAndroid Build Coastguard Worker };
145*4bdc9457SAndroid Build Coastguard Worker
146*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(5, xnn_get_heuristic_mr_gemm(5, params.mr, params.nr, params.minmax.gemm));
147*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(5, xnn_get_heuristic_mr_igemm(5, params.mr, params.nr, params.minmax.igemm));
148*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_gemm(4, params.mr, params.nr, params.minmax.gemm));
149*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_igemm(4, params.mr, params.nr, params.minmax.igemm));
150*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_gemm(2, params.mr, params.nr, params.minmax.gemm));
151*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_igemm(2, params.mr, params.nr, params.minmax.igemm));
152*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(1, xnn_get_heuristic_mr_gemm(1, params.mr, params.nr, params.minmax.gemm));
153*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(1, xnn_get_heuristic_mr_igemm(1, params.mr, params.nr, params.minmax.igemm));
154*4bdc9457SAndroid Build Coastguard Worker }
155*4bdc9457SAndroid Build Coastguard Worker
TEST(HEURISTIC_MR,batch_size_larger_than_mr)156*4bdc9457SAndroid Build Coastguard Worker TEST(HEURISTIC_MR, batch_size_larger_than_mr) {
157*4bdc9457SAndroid Build Coastguard Worker gemm_parameters params = {
158*4bdc9457SAndroid Build Coastguard Worker .minmax = {
159*4bdc9457SAndroid Build Coastguard Worker .gemm = {
160*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
161*4bdc9457SAndroid Build Coastguard Worker empty_gemm_ukernel,
162*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
163*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
164*4bdc9457SAndroid Build Coastguard Worker },
165*4bdc9457SAndroid Build Coastguard Worker .igemm = {
166*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
167*4bdc9457SAndroid Build Coastguard Worker empty_igemm_ukernel,
168*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
169*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
170*4bdc9457SAndroid Build Coastguard Worker },
171*4bdc9457SAndroid Build Coastguard Worker },
172*4bdc9457SAndroid Build Coastguard Worker .mr = 4,
173*4bdc9457SAndroid Build Coastguard Worker .nr = 8,
174*4bdc9457SAndroid Build Coastguard Worker };
175*4bdc9457SAndroid Build Coastguard Worker
176*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(3, xnn_get_heuristic_mr_gemm(5, params.mr, params.nr, params.minmax.gemm));
177*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(3, xnn_get_heuristic_mr_igemm(5, params.mr, params.nr, params.minmax.igemm));
178*4bdc9457SAndroid Build Coastguard Worker
179*4bdc9457SAndroid Build Coastguard Worker params = (gemm_parameters) {
180*4bdc9457SAndroid Build Coastguard Worker .minmax = {
181*4bdc9457SAndroid Build Coastguard Worker .gemm = {
182*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
183*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
184*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
185*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
186*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
187*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
188*4bdc9457SAndroid Build Coastguard Worker },
189*4bdc9457SAndroid Build Coastguard Worker .igemm = {
190*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
191*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
192*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
193*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
194*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
195*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
196*4bdc9457SAndroid Build Coastguard Worker },
197*4bdc9457SAndroid Build Coastguard Worker },
198*4bdc9457SAndroid Build Coastguard Worker .mr = 6,
199*4bdc9457SAndroid Build Coastguard Worker .nr = 8,
200*4bdc9457SAndroid Build Coastguard Worker };
201*4bdc9457SAndroid Build Coastguard Worker
202*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_gemm(7, params.mr, params.nr, params.minmax.gemm));
203*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_igemm(7, params.mr, params.nr, params.minmax.igemm));
204*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_gemm(11, params.mr, params.nr, params.minmax.gemm));
205*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_igemm(11, params.mr, params.nr, params.minmax.igemm));
206*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_gemm(22, params.mr, params.nr, params.minmax.gemm));
207*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_igemm(22, params.mr, params.nr, params.minmax.igemm));
208*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(5, xnn_get_heuristic_mr_gemm(50, params.mr, params.nr, params.minmax.gemm));
209*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(5, xnn_get_heuristic_mr_igemm(50, params.mr, params.nr, params.minmax.igemm));
210*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(5, xnn_get_heuristic_mr_gemm(50, params.mr, params.nr, params.minmax.gemm));
211*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(5, xnn_get_heuristic_mr_igemm(50, params.mr, params.nr, params.minmax.igemm));
212*4bdc9457SAndroid Build Coastguard Worker // Tests some MobiletNet params.
213*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_gemm(112*112, params.mr, params.nr, params.minmax.gemm));
214*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_igemm(112*112, params.mr, params.nr, params.minmax.igemm));
215*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_gemm(56*56, params.mr, params.nr, params.minmax.gemm));
216*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_igemm(56*56, params.mr, params.nr, params.minmax.igemm));
217*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_gemm(14 * 14, params.mr, params.nr, params.minmax.gemm));
218*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(6, xnn_get_heuristic_mr_igemm(14 * 14, params.mr, params.nr, params.minmax.igemm));
219*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(5, xnn_get_heuristic_mr_gemm(7*7, params.mr, params.nr, params.minmax.gemm));
220*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(5, xnn_get_heuristic_mr_igemm(7*7, params.mr, params.nr, params.minmax.igemm));
221*4bdc9457SAndroid Build Coastguard Worker }
222*4bdc9457SAndroid Build Coastguard Worker
TEST(HEURISTIC_MR,max_mr_without_mr1_kernel)223*4bdc9457SAndroid Build Coastguard Worker TEST(HEURISTIC_MR, max_mr_without_mr1_kernel) {
224*4bdc9457SAndroid Build Coastguard Worker gemm_parameters params = {
225*4bdc9457SAndroid Build Coastguard Worker .minmax = {
226*4bdc9457SAndroid Build Coastguard Worker .gemm = {
227*4bdc9457SAndroid Build Coastguard Worker empty_gemm_ukernel,
228*4bdc9457SAndroid Build Coastguard Worker empty_gemm_ukernel,
229*4bdc9457SAndroid Build Coastguard Worker empty_gemm_ukernel,
230*4bdc9457SAndroid Build Coastguard Worker dummy_gemm_ukernel,
231*4bdc9457SAndroid Build Coastguard Worker },
232*4bdc9457SAndroid Build Coastguard Worker .igemm = {
233*4bdc9457SAndroid Build Coastguard Worker empty_igemm_ukernel,
234*4bdc9457SAndroid Build Coastguard Worker empty_igemm_ukernel,
235*4bdc9457SAndroid Build Coastguard Worker empty_igemm_ukernel,
236*4bdc9457SAndroid Build Coastguard Worker dummy_igemm_ukernel,
237*4bdc9457SAndroid Build Coastguard Worker },
238*4bdc9457SAndroid Build Coastguard Worker },
239*4bdc9457SAndroid Build Coastguard Worker .mr = 4,
240*4bdc9457SAndroid Build Coastguard Worker .nr = 8,
241*4bdc9457SAndroid Build Coastguard Worker };
242*4bdc9457SAndroid Build Coastguard Worker
243*4bdc9457SAndroid Build Coastguard Worker // batch size == 3 < mr == 4, pick smallest available kernel to minimize clamps.
244*4bdc9457SAndroid Build Coastguard Worker ASSERT_EQ(4, xnn_get_heuristic_mr_gemm(3, params.mr, params.nr, params.minmax.gemm));
245*4bdc9457SAndroid Build Coastguard Worker }
246