blob: 78b623cb7f58f1220b575734264d4be967db8b60 [file] [edit]
#!/usr/bin/env python3
# Copyright 2024 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
import os
from gemm_compiler import avx512vnni_template
from gemm_compiler import generate
from gemm_compiler import neondot_template
output_base = 'src/qs8-qc8w-gemm/gen/'
def generate_qs8_qc8w_gemm_microkernels():
"""Generates qs8-qc8w assembly gemm microkernels."""
if '/bazel-out/' in os.getcwd():
os.chdir(os.environ['BUILD_WORKING_DIRECTORY'])
for unroll in {1, 2, 4}:
decrement = 32 * unroll
nr = 16
for mr in range(1, 6):
generate.generate_gemm_microkernel(
isa=neondot_template.NeonDotQS8QC8W(mr, nr, unroll),
output_file=os.path.join(
output_base,
f'qs8-qc8w-gemm-{mr}x{nr}-minmax-fp32-asm-aarch64-neondot-ld{decrement}.S',
),
)
nr = 16
for mr in range(1, 12):
for c in [4, 8]:
generate.generate_gemm_microkernel(
isa=avx512vnni_template.Avx512VnniQS8QC8W(mr, nr, c),
output_file=os.path.join(
output_base,
f'qs8-qc8w-gemm-{mr}x{nr}c{c}-minmax-fp32-asm-amd64-avx512vnni.S',
),
)