blob: 18ade978858165ff3f3cdd599e57a06bf8315a11 [file] [log] [blame]
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +00001/*
Georgios Pinitas856f66e2021-04-22 21:13:21 +01002 * Copyright (c) 2020-2021 Arm Limited.
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +00003 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
SiCong Lia085a0c2020-12-02 14:54:34 +000024#include "src/runtime/CL/gemm/CLGEMMDefaultTypeBifrost.h"
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +000025
26#include "arm_compute/core/CL/CLHelpers.h"
27#include "arm_compute/core/CL/CLKernelLibrary.h"
Georgios Pinitas7891a732021-08-20 21:39:25 +010028#include "src/gpu/cl/kernels/gemm/ClGemmHelpers.h"
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +000029
30#include <map>
31#include <utility>
32
33namespace arm_compute
34{
35namespace cl_gemm
36{
SiCong Lia085a0c2020-12-02 14:54:34 +000037CLGEMMDefaultTypeBifrost::CLGEMMDefaultTypeBifrost(GPUTarget gpu)
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +000038 : ICLGEMMKernelSelection(gpu)
39{
40}
41
SiCong Lia085a0c2020-12-02 14:54:34 +000042CLGEMMKernelType CLGEMMDefaultTypeBifrost::select_kernel(const CLGEMMKernelSelectionParams &params)
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +000043{
44 // _target could be used in the future to have a dedicated heuristic for each GPU IP
45 ARM_COMPUTE_UNUSED(_target);
46
SiCong Lia085a0c2020-12-02 14:54:34 +000047 using FunctionExecutorPtr = CLGEMMKernelType (CLGEMMDefaultTypeBifrost::*)(unsigned int m, unsigned int n, unsigned int k, unsigned int b, bool is_rhs_constant);
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +000048
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +010049 // Default configurations for Bifrost architectures
50 static std::map<DataType, FunctionExecutorPtr> gemm_default_configs =
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +000051 {
SiCong Lia085a0c2020-12-02 14:54:34 +000052 { DataType::F32, &CLGEMMDefaultTypeBifrost::default_f32 },
53 { DataType::F16, &CLGEMMDefaultTypeBifrost::default_f16 },
54 { DataType::QASYMM8, &CLGEMMDefaultTypeBifrost::default_q8 },
55 { DataType::QASYMM8_SIGNED, &CLGEMMDefaultTypeBifrost::default_q8 },
56 { DataType::QSYMM8, &CLGEMMDefaultTypeBifrost::default_q8 },
57 { DataType::QSYMM8_PER_CHANNEL, &CLGEMMDefaultTypeBifrost::default_q8 }
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +000058 };
59
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +010060 // Mali-G71 configurations
61 static std::map<DataType, FunctionExecutorPtr> gemm_g71_configs =
62 {
SiCong Lia085a0c2020-12-02 14:54:34 +000063 { DataType::F32, &CLGEMMDefaultTypeBifrost::default_f32 },
64 { DataType::F16, &CLGEMMDefaultTypeBifrost::g71_f16 },
65 { DataType::QASYMM8, &CLGEMMDefaultTypeBifrost::default_q8 },
66 { DataType::QASYMM8_SIGNED, &CLGEMMDefaultTypeBifrost::default_q8 },
67 { DataType::QSYMM8, &CLGEMMDefaultTypeBifrost::default_q8 },
68 { DataType::QSYMM8_PER_CHANNEL, &CLGEMMDefaultTypeBifrost::default_q8 }
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +010069 };
70
Gian Marco Iodiceeaca67a2020-11-10 10:41:37 +000071 // Mali-G52 configurations
72 static std::map<DataType, FunctionExecutorPtr> gemm_g52_configs =
73 {
SiCong Lia085a0c2020-12-02 14:54:34 +000074 { DataType::F32, &CLGEMMDefaultTypeBifrost::g52_f32 },
75 { DataType::F16, &CLGEMMDefaultTypeBifrost::g52_f16 },
76 { DataType::QASYMM8, &CLGEMMDefaultTypeBifrost::default_q8 },
77 { DataType::QASYMM8_SIGNED, &CLGEMMDefaultTypeBifrost::default_q8 },
78 { DataType::QSYMM8, &CLGEMMDefaultTypeBifrost::default_q8 },
79 { DataType::QSYMM8_PER_CHANNEL, &CLGEMMDefaultTypeBifrost::default_q8 }
Gian Marco Iodiceeaca67a2020-11-10 10:41:37 +000080 };
81
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +010082 // Mali-G76 configurations
83 static std::map<DataType, FunctionExecutorPtr> gemm_g76_configs =
84 {
SiCong Lia085a0c2020-12-02 14:54:34 +000085 { DataType::F32, &CLGEMMDefaultTypeBifrost::g76_f32 },
86 { DataType::F16, &CLGEMMDefaultTypeBifrost::g76_f16 },
87 { DataType::QASYMM8, &CLGEMMDefaultTypeBifrost::default_q8 },
88 { DataType::QASYMM8_SIGNED, &CLGEMMDefaultTypeBifrost::default_q8 },
89 { DataType::QSYMM8, &CLGEMMDefaultTypeBifrost::default_q8 },
90 { DataType::QSYMM8_PER_CHANNEL, &CLGEMMDefaultTypeBifrost::default_q8 }
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +010091 };
92
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +000093 const DataType data_type = params.data_type;
94
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +010095 switch(_target)
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +000096 {
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +010097 case GPUTarget::G71:
98 if(gemm_g71_configs.find(data_type) != gemm_g71_configs.end())
99 {
Gian Marco Iodice026d0452020-08-28 13:52:12 +0100100 return (this->*gemm_g71_configs[data_type])(params.m, params.n, params.k, params.b, params.is_rhs_constant);
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100101 }
102 ARM_COMPUTE_ERROR("Not supported data type");
103 case GPUTarget::G76:
104 if(gemm_g76_configs.find(data_type) != gemm_g76_configs.end())
105 {
Gian Marco Iodice026d0452020-08-28 13:52:12 +0100106 return (this->*gemm_g76_configs[data_type])(params.m, params.n, params.k, params.b, params.is_rhs_constant);
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100107 }
108 ARM_COMPUTE_ERROR("Not supported data type");
Gian Marco Iodiceeaca67a2020-11-10 10:41:37 +0000109 case GPUTarget::G52:
110 if(gemm_g52_configs.find(data_type) != gemm_g52_configs.end())
111 {
112 return (this->*gemm_g52_configs[data_type])(params.m, params.n, params.k, params.b, params.is_rhs_constant);
113 }
114 ARM_COMPUTE_ERROR("Not supported data type");
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100115 default:
116 if(gemm_default_configs.find(data_type) != gemm_default_configs.end())
117 {
Gian Marco Iodice026d0452020-08-28 13:52:12 +0100118 return (this->*gemm_default_configs[data_type])(params.m, params.n, params.k, params.b, params.is_rhs_constant);
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100119 }
120 ARM_COMPUTE_ERROR("Not supported data type");
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000121 }
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000122}
123
SiCong Lia085a0c2020-12-02 14:54:34 +0000124CLGEMMKernelType CLGEMMDefaultTypeBifrost::default_f32(unsigned int m, unsigned int n, unsigned int k, unsigned int b, bool is_rhs_constant)
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000125{
Gian Marco Iodice026d0452020-08-28 13:52:12 +0100126 ARM_COMPUTE_UNUSED(b);
127
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100128 CLGEMMKernelType gemm_type = CLGEMMKernelType::NATIVE;
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000129
130 if(is_rhs_constant)
131 {
132 if((m > 1) && (n < 16))
133 {
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100134 gemm_type = CLGEMMKernelType::RESHAPED;
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100135 }
136 else if(m == 1)
137 {
138 gemm_type = CLGEMMKernelType::RESHAPED_ONLY_RHS;
139 }
140 else
141 {
142 if((k > 256) && (m > 4))
143 {
144 constexpr float alpha = 3.2f;
145 constexpr float fact0 = 1.51f;
146 constexpr float fact1 = 1.66f;
147 constexpr float ops = 12.0f;
148 const float scale = k > 1024 ? 1.07f : 1.0f;
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100149 gemm_type = (alpha + ((n * fact0) / ops) < ((fact1 * n * scale) / ops)) ? CLGEMMKernelType::RESHAPED : CLGEMMKernelType::RESHAPED_ONLY_RHS;
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100150 }
151 else
152 {
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100153 gemm_type = CLGEMMKernelType::RESHAPED_ONLY_RHS;
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100154 }
155 }
156
157 const auto workload = static_cast<float>((m * n) / 20.0f);
158
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100159 gemm_type = ((workload > 1600.0f) && (gemm_type == CLGEMMKernelType::RESHAPED)) ? CLGEMMKernelType::RESHAPED : gemm_type;
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100160 }
161
162 return gemm_type;
163}
164
SiCong Lia085a0c2020-12-02 14:54:34 +0000165CLGEMMKernelType CLGEMMDefaultTypeBifrost::default_f16(unsigned int m, unsigned int n, unsigned int k, unsigned int b, bool is_rhs_constant)
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100166{
Gian Marco Iodice026d0452020-08-28 13:52:12 +0100167 ARM_COMPUTE_UNUSED(n, k, b);
168
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100169 if(is_rhs_constant)
170 {
171 if(m == 1)
172 {
173 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
174 }
175 else
176 {
177 return CLGEMMKernelType::RESHAPED;
178 }
179 }
180 else
181 {
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100182 return CLGEMMKernelType::NATIVE;
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100183 }
184}
185
SiCong Lia085a0c2020-12-02 14:54:34 +0000186CLGEMMKernelType CLGEMMDefaultTypeBifrost::default_q8(unsigned int m, unsigned int n, unsigned int k, unsigned int b, bool is_rhs_constant)
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100187{
Gian Marco Iodice026d0452020-08-28 13:52:12 +0100188 ARM_COMPUTE_UNUSED(m, n, k, b);
Gian Marco Iodiceeb65f6d2020-04-15 11:42:15 +0100189
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100190 if(is_rhs_constant)
191 {
Gian Marco Iodiceeb65f6d2020-04-15 11:42:15 +0100192 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100193 }
194 else
195 {
Gian Marco Iodiceeb65f6d2020-04-15 11:42:15 +0100196 return CLGEMMKernelType::NATIVE;
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100197 }
198}
199
SiCong Lia085a0c2020-12-02 14:54:34 +0000200CLGEMMKernelType CLGEMMDefaultTypeBifrost::g76_f32(unsigned int m, unsigned int n, unsigned int k, unsigned int b, bool is_rhs_constant)
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100201{
Gian Marco Iodice026d0452020-08-28 13:52:12 +0100202 ARM_COMPUTE_UNUSED(b);
203
Gian Marco Iodice12e02092020-09-01 13:59:44 +0100204 if(!is_rhs_constant)
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100205 {
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100206 return CLGEMMKernelType::NATIVE;
Gian Marco Iodice12e02092020-09-01 13:59:44 +0100207 }
Gian Marco Iodice12e02092020-09-01 13:59:44 +0100208 if(m == 1)
209 {
210 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
211 }
Gian Marco Iodice12e02092020-09-01 13:59:44 +0100212 if(k <= 496)
213 {
214 if(n <= 544)
Gian Marco Iodicef6ffe992020-04-14 12:09:43 +0100215 {
Gian Marco Iodice12e02092020-09-01 13:59:44 +0100216 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000217 }
218 else
219 {
Gian Marco Iodice12e02092020-09-01 13:59:44 +0100220 return CLGEMMKernelType::RESHAPED;
221 }
222 }
223 else
224 {
225 if(k <= 588)
226 {
227 if(k <= 552)
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000228 {
Gian Marco Iodice12e02092020-09-01 13:59:44 +0100229 if(m <= 148)
230 {
231 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
232 }
233 else
234 {
235 if(m <= 278)
236 {
237 return CLGEMMKernelType::RESHAPED;
238 }
239 else
240 {
241 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
242 }
243 }
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000244 }
245 else
246 {
Gian Marco Iodice12e02092020-09-01 13:59:44 +0100247 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000248 }
249 }
Gian Marco Iodice12e02092020-09-01 13:59:44 +0100250 else
251 {
252 return CLGEMMKernelType::RESHAPED;
253 }
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000254 }
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000255}
256
SiCong Lia085a0c2020-12-02 14:54:34 +0000257CLGEMMKernelType CLGEMMDefaultTypeBifrost::g52_f32(unsigned int m, unsigned int n, unsigned int k, unsigned int b, bool is_rhs_constant)
Gian Marco Iodiceeaca67a2020-11-10 10:41:37 +0000258{
259 ARM_COMPUTE_UNUSED(b);
260
SiCong Lia085a0c2020-12-02 14:54:34 +0000261 if(!is_rhs_constant)
Gian Marco Iodiceeaca67a2020-11-10 10:41:37 +0000262 {
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100263 return CLGEMMKernelType::NATIVE;
Gian Marco Iodiceeaca67a2020-11-10 10:41:37 +0000264 }
265
SiCong Lia085a0c2020-12-02 14:54:34 +0000266 if(m == 1)
Gian Marco Iodiceeaca67a2020-11-10 10:41:37 +0000267 {
268 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
269 }
270
271 const float r_mn = static_cast<float>(m) / static_cast<float>(n);
272 const float r_mk = static_cast<float>(m) / static_cast<float>(k);
273 const float r_nk = static_cast<float>(n) / static_cast<float>(k);
274 const float r_mnk = static_cast<float>(m) / (static_cast<float>(n) * static_cast<float>(k));
275
276 if(r_mn <= 1.5469f)
277 {
278 if(r_mk <= 0.8766f)
279 {
280 if(r_mk <= 0.0211f)
281 {
282 if(r_mnk <= 77.5833f)
283 {
284 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
285 }
286 else
287 {
288 return CLGEMMKernelType::RESHAPED;
289 }
290 }
291 else
292 {
293 if(r_nk <= 0.0832f)
294 {
295 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
296 }
297 else
298 {
299 return CLGEMMKernelType::RESHAPED;
300 }
301 }
302 }
303 else
304 {
305 if(r_mnk <= 193.0000f)
306 {
307 if(r_mn <= 0.9948f)
308 {
309 if(r_mk <= 2.5453f)
310 {
311 return CLGEMMKernelType::RESHAPED;
312 }
313 else
314 {
315 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
316 }
317 }
318 else
319 {
320 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
321 }
322 }
323 else
324 {
325 return CLGEMMKernelType::RESHAPED;
326 }
327 }
328 }
329 else
330 {
331 if(r_mn <= 17.7370f)
332 {
333 if(r_mnk <= 1391.2875f)
334 {
335 if(r_mk <= 2.9724f)
336 {
337 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
338 }
339 else
340 {
341 if(r_mnk <= 470.0000f)
342 {
343 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
344 }
345 else
346 {
347 return CLGEMMKernelType::RESHAPED;
348 }
349 }
350 }
351 else
352 {
353 if(r_nk <= 0.1381f)
354 {
355 if(r_mnk <= 9040.5000f)
356 {
357 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
358 }
359 else
360 {
361 return CLGEMMKernelType::RESHAPED;
362 }
363 }
364 else
365 {
366 if(r_mn <= 5.6790f)
367 {
368 return CLGEMMKernelType::RESHAPED;
369 }
370 else
371 {
372 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
373 }
374 }
375 }
376 }
377 else
378 {
379 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
380 }
381 }
382}
383
SiCong Lia085a0c2020-12-02 14:54:34 +0000384CLGEMMKernelType CLGEMMDefaultTypeBifrost::g76_f16(unsigned int m, unsigned int n, unsigned int k, unsigned int b, bool is_rhs_constant)
Gian Marco Iodice839e1982020-10-29 13:36:50 +0000385{
386 ARM_COMPUTE_UNUSED(b);
387
SiCong Lia085a0c2020-12-02 14:54:34 +0000388 if(!is_rhs_constant)
Gian Marco Iodice839e1982020-10-29 13:36:50 +0000389 {
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100390 return CLGEMMKernelType::NATIVE;
Gian Marco Iodice839e1982020-10-29 13:36:50 +0000391 }
392
SiCong Lia085a0c2020-12-02 14:54:34 +0000393 if(m == 1)
Gian Marco Iodice839e1982020-10-29 13:36:50 +0000394 {
395 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
396 }
397
398 const float r_mn = static_cast<float>(m) / static_cast<float>(n);
399 const float r_nk = static_cast<float>(n) / static_cast<float>(k);
400
401 if(k <= 212)
402 {
403 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
404 }
405 else
406 {
407 if(r_nk <= 0.4990234375f)
408 {
409 if(k <= 1392)
410 {
411 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
412 }
413 else
414 {
415 if(m <= 325)
416 {
417 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
418 }
419 else
420 {
421 return CLGEMMKernelType::RESHAPED;
422 }
423 }
424 }
425 else
426 {
427 if(k <= 471)
428 {
429 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
430 }
431 else
432 {
433 if(r_mn <= 0.04475911520421505f)
434 {
435 return CLGEMMKernelType::RESHAPED;
436 }
437 else
438 {
439 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
440 }
441 }
442 }
443 }
444}
445
SiCong Lia085a0c2020-12-02 14:54:34 +0000446CLGEMMKernelType CLGEMMDefaultTypeBifrost::g52_f16(unsigned int m, unsigned int n, unsigned int k, unsigned int b, bool is_rhs_constant)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000447{
SiCong Lia085a0c2020-12-02 14:54:34 +0000448 if(!is_rhs_constant)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000449 {
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100450 return CLGEMMKernelType::NATIVE;
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000451 }
452
SiCong Lia085a0c2020-12-02 14:54:34 +0000453 if(m == 1)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000454 {
455 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
456 }
457
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000458 if(n <= 127.0000f)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000459 {
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000460 if(n <= 63.5000f)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000461 {
462 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
463 }
464 else
465 {
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000466 if(m <= 3616.0000f)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000467 {
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000468 if(b <= 18.5000f)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000469 {
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000470 if(m <= 2970.5000f)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000471 {
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000472 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
473 }
474 else
475 {
476 if(k <= 104.0000f)
477 {
478 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
479 }
480 else
481 {
482 return CLGEMMKernelType::RESHAPED;
483 }
484 }
485 }
486 else
487 {
488 return CLGEMMKernelType::RESHAPED;
489 }
490 }
491 else
492 {
493 return CLGEMMKernelType::RESHAPED;
494 }
495 }
496 }
497 else
498 {
499 if(m <= 12.5000f)
500 {
501 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
502 }
503 else
504 {
505 if(k <= 104.0000f)
506 {
507 if(b <= 18.5000f)
508 {
509 if(m <= 490.0000f)
510 {
511 if(n <= 272.0000f)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000512 {
513 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
514 }
515 else
516 {
517 return CLGEMMKernelType::RESHAPED;
518 }
519 }
520 else
521 {
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000522 return CLGEMMKernelType::RESHAPED;
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000523 }
524 }
525 else
526 {
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000527 return CLGEMMKernelType::RESHAPED;
528 }
529 }
530 else
531 {
532 if(m <= 226.0000f)
533 {
534 if(n <= 140.0000f)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000535 {
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000536 if(m <= 179.5000f)
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000537 {
538 return CLGEMMKernelType::RESHAPED;
539 }
540 else
541 {
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000542 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000543 }
544 }
Gian Marco Iodice8919a1a2020-11-23 16:10:27 +0000545 else
546 {
547 return CLGEMMKernelType::RESHAPED;
548 }
549 }
550 else
551 {
552 return CLGEMMKernelType::RESHAPED;
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000553 }
554 }
Gian Marco Iodice229757b2020-11-15 16:06:10 +0000555 }
556 }
557}
558
SiCong Lia085a0c2020-12-02 14:54:34 +0000559CLGEMMKernelType CLGEMMDefaultTypeBifrost::g71_f16(unsigned int m, unsigned int n, unsigned int k, unsigned int b, bool is_rhs_constant)
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000560{
Gian Marco Iodice026d0452020-08-28 13:52:12 +0100561 ARM_COMPUTE_UNUSED(b);
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100562 ARM_COMPUTE_UNUSED(n);
563 ARM_COMPUTE_UNUSED(k);
Gian Marco Iodice026d0452020-08-28 13:52:12 +0100564
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000565 if(is_rhs_constant)
566 {
567 if(m == 1)
568 {
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100569 return CLGEMMKernelType::RESHAPED_ONLY_RHS;
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000570 }
571 else
572 {
573 return CLGEMMKernelType::RESHAPED;
574 }
575 }
576 else
577 {
Gian Marco Iodicec9cecc02021-10-15 10:23:24 +0100578 return CLGEMMKernelType::NATIVE;
Gian Marco Iodice5a4fe192020-03-16 12:22:37 +0000579 }
580}
581} // namespace cl_gemm
582} // namespace arm_compute