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
211 lines
9.1 KiB
Python
211 lines
9.1 KiB
Python
################################################################################
|
|
#
|
|
# Copyright (C) 2016-2023 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.
|
|
#
|
|
################################################################################
|
|
|
|
# This script converts the reference library logic to all other similar/family library logics.
|
|
# python3 path-to-Tensile-repo/Tensile/tuning/automation/LibraryLogicConvertor.py <path-to-lib-logics> <output-dir>
|
|
|
|
import os
|
|
import argparse
|
|
import shutil
|
|
|
|
validLogics=[
|
|
'aquavanjaram942_Cijk_Ailk_Bljk_F8SS_BH.yaml', # 'F8SS_NN'
|
|
'aquavanjaram942_Cijk_Ailk_Bljk_F8F8S_BH.yaml', # 'F8F8S_NN'
|
|
'aquavanjaram942_Cijk_Ailk_Bljk_F8HS_BH.yaml', # 'F8HS_NN'
|
|
'aquavanjaram942_Cijk_Ailk_Bljk_F8F8S_SR_BH.yaml', # 'F8F8S_SR_NN'
|
|
'aquavanjaram942_Cijk_Ailk_Bljk_BBS_BH.yaml', # 'BBS_NN'
|
|
'aquavanjaram942_Cijk_Ailk_Bljk_HHS_BH.yaml', # 'HHS_NN'
|
|
'aquavanjaram942_Cijk_Ailk_Bljk_BSS_BH.yaml', # 'BSS_NN'
|
|
'aquavanjaram942_Cijk_Ailk_Bljk_HSS_BH.yaml', # 'HSS_NN'
|
|
|
|
'aquavanjaram942_Cijk_Ailk_Bjlk_F8SS_BH.yaml', # 'F8SS_NT'
|
|
'aquavanjaram942_Cijk_Ailk_Bjlk_F8F8S_BH.yaml', # 'F8F8S_NT'
|
|
'aquavanjaram942_Cijk_Ailk_Bjlk_F8HS_BH.yaml', # 'F8HS_NT'
|
|
'aquavanjaram942_Cijk_Ailk_Bjlk_F8F8S_SR_BH.yaml', # 'F8F8S_SR_NT'
|
|
'aquavanjaram942_Cijk_Ailk_Bjlk_BBS_BH.yaml', # 'BBS_NT'
|
|
'aquavanjaram942_Cijk_Ailk_Bjlk_HHS_BH.yaml', # 'HHS_NT'
|
|
'aquavanjaram942_Cijk_Ailk_Bjlk_BSS_BH.yaml', # 'BSS_NT'
|
|
'aquavanjaram942_Cijk_Ailk_Bjlk_HSS_BH.yaml', # 'HSS_NT'
|
|
|
|
'aquavanjaram942_Cijk_Alik_Bljk_F8SS_BH.yaml', # 'F8SS_TN'
|
|
'aquavanjaram942_Cijk_Alik_Bljk_F8F8S_BH.yaml', # 'F8F8S_TN'
|
|
'aquavanjaram942_Cijk_Alik_Bljk_F8HS_BH.yaml', # 'F8HS_TN'
|
|
'aquavanjaram942_Cijk_Alik_Bljk_F8F8S_SR_BH.yaml', # 'F8F8S_SR_TN'
|
|
'aquavanjaram942_Cijk_Alik_Bljk_BBS_BH.yaml', # 'BBS_TN'
|
|
'aquavanjaram942_Cijk_Alik_Bljk_HHS_BH.yaml', # 'HHS_TN'
|
|
'aquavanjaram942_Cijk_Alik_Bljk_BSS_BH.yaml', # 'BSS_TN'
|
|
'aquavanjaram942_Cijk_Alik_Bljk_HSS_BH.yaml', # 'HSS_TN'
|
|
|
|
'aquavanjaram942_Cijk_Alik_Bjlk_F8SS_BH.yaml', # 'F8SS_TT'
|
|
'aquavanjaram942_Cijk_Alik_Bjlk_F8F8S_BH.yaml', # 'F8F8S_TT'
|
|
'aquavanjaram942_Cijk_Alik_Bjlk_F8HS_BH.yaml', # 'F8HS_TT'
|
|
'aquavanjaram942_Cijk_Alik_Bjlk_F8F8S_SR_BH.yaml', # 'F8F8S_SR_TT'
|
|
'aquavanjaram942_Cijk_Alik_Bjlk_BBS_BH.yaml', # 'BBS_TT'
|
|
'aquavanjaram942_Cijk_Alik_Bjlk_HHS_BH.yaml', # 'HHS_TT'
|
|
'aquavanjaram942_Cijk_Alik_Bjlk_BSS_BH.yaml', # 'BSS_TT'
|
|
'aquavanjaram942_Cijk_Alik_Bjlk_HSS_BH.yaml' # 'HSS_TT'
|
|
]
|
|
|
|
# family lib logics
|
|
conversions={
|
|
'F8SS' : ['B8SS', 'F8B8SS', 'B8F8SS', 'I8II'],
|
|
'F8F8S' : ['F8B8B8S', 'B8B8S', 'B8F8B8S'],
|
|
'F8HS' : ['B8HS', 'F8B8HS', 'B8F8HS'],
|
|
'F8F8S_SR': ['F8B8B8S_SR', 'B8B8S_SR', 'B8F8B8S_SR'],
|
|
'HHS' : ['BBS'],
|
|
'HSS' : ['BSS'],
|
|
'BBS' : ['HHS'],
|
|
'BSS' : ['HSS']
|
|
}
|
|
|
|
# not needed, for reference/debugging
|
|
typeIndexToName = {0: "f32_r",
|
|
1: "f64_r",
|
|
2: "f32_c",
|
|
3: "f64_c",
|
|
4: "f16_r",
|
|
5: "i8_r",
|
|
6: "i32_r",
|
|
7: "bf16_r",
|
|
8: "i8_r",
|
|
10: "f8_r",
|
|
11: "bf8_r",
|
|
12: "f8b8",
|
|
13: "b8f8"}
|
|
|
|
# datatype of each GEMM functions
|
|
datatypes={
|
|
'F8SS': [' DataType: 10', ' DestDataType: 0', ' ComputeDataType: 0'],
|
|
'B8SS': [' DataType: 11', ' DestDataType: 0', ' ComputeDataType: 0'],
|
|
'F8B8SS':[' DataType: 12', ' DestDataType: 0', ' ComputeDataType: 0'],
|
|
'B8F8SS':[' DataType: 13', ' DestDataType: 0', ' ComputeDataType: 0'],
|
|
'I8II': [' DataType: 8', ' DestDataType: 6', ' ComputeDataType: 6'],
|
|
|
|
'F8F8S': [' DataType: 10', ' DestDataType: 10', ' ComputeDataType: 0'],
|
|
'B8B8S': [' DataType: 11', ' DestDataType: 11', ' ComputeDataType: 0'],
|
|
'F8B8B8S':[' DataType: 12', ' DestDataType: 11', ' ComputeDataType: 0'],
|
|
'B8F8B8S':[' DataType: 13', ' DestDataType: 11', ' ComputeDataType: 0'],
|
|
|
|
'F8HS': [' DataType: 10', ' DestDataType: 4', ' ComputeDataType: 0'],
|
|
'B8HS': [' DataType: 11', ' DestDataType: 4', ' ComputeDataType: 0'],
|
|
'F8B8HS':[' DataType: 12', ' DestDataType: 4', ' ComputeDataType: 0'],
|
|
'B8F8HS':[' DataType: 13', ' DestDataType: 4', ' ComputeDataType: 0'],
|
|
|
|
# don't need it, non-SR cases will take care of SR.
|
|
#'F8F8S_SR': [' DataType: 10', ' DestDataType: 10', ' ComputeDataType: 0'],
|
|
#'B8B8S_SR': [' DataType: 11', ' DestDataType: 11', ' ComputeDataType: 0'],
|
|
#'F8B8B8S_SR':[' DataType: 12', ' DestDataType: 11', ' ComputeDataType: 0'],
|
|
#'B8F8B8S_SR':[' DataType: 13', ' DestDataType: 11', ' ComputeDataType: 0']
|
|
|
|
'BBS': [' DataType: 7', ' DestDataType: 7', ' ComputeDataType: 0'],
|
|
'HHS': [' DataType: 4', ' DestDataType: 4', ' ComputeDataType: 0'],
|
|
|
|
'BSS': [' DataType: 7', ' DestDataType: 0', ' ComputeDataType: 0'],
|
|
'HSS': [' DataType: 4', ' DestDataType: 0', ' ComputeDataType: 0']
|
|
}
|
|
|
|
def parseArgs():
|
|
argParser = argparse.ArgumentParser()
|
|
|
|
h = {"libLogic" : "path to library logics",
|
|
"outDir" : "Output directory for rocBLAS-bench yaml files"
|
|
}
|
|
|
|
argParser.add_argument("libLogic", metavar="logic-file", type=str, help=h["libLogic"])
|
|
argParser.add_argument("outDir", metavar="output-dir", type=str, help=h["outDir"])
|
|
|
|
return argParser.parse_args()
|
|
|
|
# This def reads all the files in the liblogic and only selects the reference yamls (see the table)
|
|
def getLogics(liblogic):
|
|
|
|
logics = []
|
|
|
|
for yaml in os.listdir(liblogic):
|
|
for val in validLogics:
|
|
if (os.path.isfile(os.path.join(liblogic, yaml)) and yaml == val):
|
|
logics.append(yaml)
|
|
break
|
|
return logics
|
|
|
|
# replaces the string in the file
|
|
def updateLogic(filename, old_string, new_string):
|
|
with open(filename) as f:
|
|
s = f.read()
|
|
if old_string not in s:
|
|
print('"{old_string}" not found in {filename}.'.format(**locals()))
|
|
return
|
|
|
|
with open(filename, 'w') as f:
|
|
print('Replacing "{old_string}" to "{new_string}" in {filename}'.format(**locals()))
|
|
s = s.replace(old_string, new_string)
|
|
f.write(s)
|
|
|
|
# converts reference lib logics to the family
|
|
def convert(logics, libLogic, outDir):
|
|
|
|
for yaml in logics:
|
|
print("\n\n <<< wokring on {}>>>".format(yaml))
|
|
for inType in conversions.keys():
|
|
if inType in yaml:
|
|
print(" reference library: {}\n".format(inType))
|
|
for newType in conversions[inType]:
|
|
|
|
# create the new logic file name
|
|
newLogic = yaml.replace(inType, newType)
|
|
print(" New item is: {}. Generating: {}".format(newType, newLogic))
|
|
|
|
# copy the original logic file with new name in the output dir
|
|
newLogicFile = os.path.join(outDir,newLogic)
|
|
shutil.copy(os.path.join(libLogic,yaml),newLogicFile)
|
|
|
|
# make changes in the new logic file
|
|
# change kernel names
|
|
updateLogic(newLogicFile, inType, newType)
|
|
|
|
#change datatypes
|
|
for i in range(3):
|
|
updateLogic(newLogicFile, datatypes[inType][i], datatypes[newType][i])
|
|
break
|
|
|
|
def main():
|
|
args = parseArgs()
|
|
|
|
# check if lib logic folder exists
|
|
if not os.path.exists(args.libLogic):
|
|
raise FileNotFoundError("{0} folder does not exist! Check the lib logic path.".format(args.libLogic))
|
|
|
|
if not os.path.exists(args.outDir):
|
|
os.makedirs(args.outDir)
|
|
|
|
#print(validLogics)
|
|
|
|
logics = getLogics(args.libLogic)
|
|
print(" Here are logics to be converted: {}".format(logics))
|
|
|
|
convert(logics, args.libLogic, args.outDir)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|