CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
171 lines
5.0 KiB
Python
171 lines
5.0 KiB
Python
#!/usr/bin/python
|
|
|
|
################################################################################
|
|
#
|
|
# Copyright (C) 2018-2022 Advanced Micro Devices, Inc. All rights reserved.
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in
|
|
# all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
#
|
|
################################################################################
|
|
|
|
from __future__ import print_function
|
|
import sys, argparse, re
|
|
|
|
verbose = 1
|
|
|
|
class GemmConfig:
|
|
def __init__(self, m, n ,k, tA, tB):
|
|
self.m = m
|
|
self.n = n
|
|
self.k = k
|
|
self.batchCnt = 1
|
|
self.tA = tA
|
|
self.tB = tB
|
|
|
|
#---
|
|
class TensileExactParser:
|
|
def __init__(self):
|
|
self.globalTA = False
|
|
self.globalTB = False
|
|
|
|
def printHeader(self):
|
|
None
|
|
#print "# %s%s Case" % \
|
|
# ("T" if self.globalTA else "N", "T" if self.globalTB else "N")
|
|
|
|
def parse(self,line):
|
|
line = line.lstrip()
|
|
if not line or line.startswith("#"):
|
|
return (0, None)
|
|
|
|
#m = re.search(".*Exact\w*:\w\[(.*)\]", line)
|
|
m = re.search(".*Exact.*\[(.*)\]", line)
|
|
try:
|
|
#print "match=", m.group(1)
|
|
nums = [int(x) for x in m.group(1).split(',')]
|
|
#print "nums=", nums
|
|
if len(nums) == 3:
|
|
g = GemmConfig(nums[0], nums[1], nums[2], self.globalTA, self.globalTB)
|
|
elif len(nums) == 4:
|
|
g = GemmConfig(nums[0], nums[1], nums[3], self.globalTA, self.globalTB)
|
|
g.batchCnt = nums[2]
|
|
return (1,g)
|
|
except AttributeError:
|
|
if verbose:
|
|
print("inparser ignored: ", l,)
|
|
return (0, None)
|
|
|
|
def emit(self, g):
|
|
# ignores GemmConfig
|
|
print(" - Exact: [ %u , %u , %u, %u ]" % \
|
|
(g.m, g.n, g.batchCnt, g.k))
|
|
|
|
#---
|
|
class DeepBenchGemmParser :
|
|
# m, n, k, a_t, b_t
|
|
# Example: std::make_tuple(4224, 1, 128, false, false)
|
|
|
|
def printHeader(self):
|
|
print("// m, n, k, a_t, b_t")
|
|
|
|
def parse(self,line):
|
|
line = line.lstrip()
|
|
if not line or line.startswith("//"):
|
|
return (0, None)
|
|
|
|
m = re.search("\s*std::make_tuple\((.*)\)", line)
|
|
try:
|
|
#print "match=", m.group(1)
|
|
fields = [x.strip() for x in m.group(1).split(',')]
|
|
assert(len(fields) == 5)
|
|
#print "nums=", nums
|
|
g = GemmConfig(int(fields[0]), int(fields[1]), int(fields[2]), fields[3]=='true', fields[4]=='true')
|
|
return (1,g)
|
|
except AttributeError:
|
|
if verbose:
|
|
sys.stderr.write ("inparser ignored: %s" % l)
|
|
return (0, None)
|
|
|
|
def emit(self, g):
|
|
assert (g.batchCnt==1)
|
|
print("std::make_tuple(%u, %u, %u, %s, %s)" % \
|
|
(g.m, g.n, g.k, "true" if g.tA else"false", "true" if g.tB else "false"))
|
|
|
|
#---
|
|
class CsvParser :
|
|
def printHeader(self):
|
|
print("tA, tB, m, n, k, batchCnt")
|
|
|
|
def parse(self,line):
|
|
line = line.lstrip()
|
|
if not line :
|
|
return (0, None)
|
|
|
|
try:
|
|
fields = [x.strip() for x in line.split(',')]
|
|
g = GemmConfig(int(fields[2]), int(fields[3]), int(fields[4]), fields[0]=='T', fields[1]=='T')
|
|
return (1,g)
|
|
except AttributeError:
|
|
if verbose:
|
|
sys.stderr.write ("inparser ignored: %s" % l)
|
|
return (0, None)
|
|
|
|
def emit(self, g):
|
|
print("%s, %s, %u, %u, %u, %u" % \
|
|
("T" if g.tA else "N", "T" if g.tB else "N", g.m, g.n, g.k, g.batchCnt))
|
|
|
|
|
|
|
|
g_formats = {
|
|
"tensile_exact" : TensileExactParser(),
|
|
"deepbench_gemm" : DeepBenchGemmParser(),
|
|
"csv" : CsvParser()
|
|
}
|
|
|
|
parser = argparse.ArgumentParser(description='convert between GEMM formats (Tensile, rocblas-bench, deepbench, CSV')
|
|
|
|
parser.add_argument('infile', type=argparse.FileType('r'),
|
|
help="Input file to process")
|
|
|
|
parser.add_argument('-i', '--in-format', action="store",
|
|
default="tensile_exact",
|
|
help="Input format")
|
|
|
|
parser.add_argument('-o', '--out-format', action="store",
|
|
default="csv",
|
|
help="Output format")
|
|
|
|
args = parser.parse_args(sys.argv[1:])
|
|
|
|
|
|
#print args
|
|
|
|
iformat = g_formats[args.in_format]
|
|
oformat = g_formats[args.out_format]
|
|
|
|
oformat.printHeader()
|
|
|
|
lineNum = 0
|
|
for l in args.infile:
|
|
lineNum = lineNum+1
|
|
#print "L:",l,
|
|
(valid, g) = iformat.parse(l)
|
|
if valid:
|
|
oformat.emit(g)
|