26 #if defined(__aarch64__) && (defined(FP16_KERNELS) || defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)) 45 static const GemmImplementation<__fp16, __fp16> gemm_fp16_methods[] = {
46 #ifdef ARM_COMPUTE_ENABLE_SVE 49 "sve_hybrid_fp16_mla_6x4VL",
50 [](
const GemmArgs &
args) {
return args._ci->has_sve(); },
52 [](
const GemmArgs &
args) {
return new GemmHybridIndirect<cls_sve_hybrid_fp16_mla_6x4VL, __fp16, __fp16>(
args); }
56 "sve_interleaved_fp16_mla_8x3VL",
57 [](
const GemmArgs &args) {
return args._ci->has_sve() && (args._Ksize > 4); },
59 [](
const GemmArgs &
args) {
return new GemmInterleaved<cls_sve_interleaved_fp16_mla_8x3VL, __fp16, __fp16>(
args); }
62 #
if defined(__aarch64__)
65 "a64_hybrid_fp16_mla_6x32",
66 [](
const GemmArgs &args) {
return args._ci->has_fp16(); },
68 [](
const GemmArgs &
args) {
return new GemmHybridIndirect<cls_a64_hybrid_fp16_mla_6x32, __fp16, __fp16>(
args); }
73 [](
const GemmArgs &args) {
return args._ci->has_fp16(); },
75 [](
const GemmArgs &
args) {
return new GemmInterleaved<cls_a64_hgemm_8x24, __fp16, __fp16>(
args); }
81 [](
const GemmArgs &
args) {
return !args._ci->has_fp16(); },
82 [](
const GemmArgs &
args) {
return new GemmInterleaved<cls_a64_sgemm_8x12, __fp16, __fp16>(
args); }
84 #elif defined(__arm__) 90 [](
const GemmArgs &
args) {
return new GemmInterleaved<sgemm_8x6, __fp16, __fp16>(
args); }
92 #else // not AArch64 or AArch32 93 # error Unknown Architecture 105 const GemmImplementation<__fp16, __fp16> *gemm_implementation_list<__fp16, __fp16>() {
106 return gemm_fp16_methods;
110 template UniqueGemmCommon<__fp16, __fp16> gemm<__fp16, __fp16, Nothing>(
const GemmArgs &
args,
const Nothing &);
111 template KernelDescription get_gemm_method<__fp16, __fp16, Nothing>(
const GemmArgs &
args,
const Nothing &);
112 template std::vector<KernelDescription> get_compatible_kernels<__fp16, __fp16, Nothing>(
const GemmArgs &
args,
const Nothing &);
116 #endif // defined(__aarch64__) && (defined(FP16_KERNELS) || defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC))
static uint64_t estimate_cycles(const GemmArgs &args)
static uint64_t estimate_cycles(const GemmArgs &args, const OutputStage &os={})
static GemmImplementation with_estimate(GemmMethod m, const char *n, std::function< bool(const GemmArgs &, const OutputStage &)> is_supported, std::function< uint64_t(const GemmArgs &, const OutputStage &)> cycle_estimate, std::function< GemmCommon< Top, Tret > *(const GemmArgs &, const OutputStage &)> instantiate)