Files
TheRock/rocm-libraries/shared/tensile/Tensile/Tests/integration/test_integration.py
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

189 lines
8.0 KiB
Python

################################################################################
#
# Copyright (C) 2020-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.
#
################################################################################
import os, subprocess, shutil, random, pytest
from filelock import FileLock
from Tensile import ClientWriter, LibraryIO, Common
from Tensile.SolutionStructs import ProblemType, ProblemSizesMock
# 1. Call TensileCreateLibrary
# 2. Get client instance from ClientExecutable()
# 3. Write some problem types/sizes to ClientParameters with writeClientConfig()
# 4. Run client with small subset of GEMM problems
# $ pytest Tensile/Tests -m integration --capture=tee-sys --builddir /tmp/pytest
# TODO fix TensileCreateLibrary build configs:
# --library-format=msgpack is currently known to fail
# --short-file-names is currently known to fail
def downloadLogicFiles(logicDir):
prefix = "library/src/blas3/Tensile/Logic/asm_full"
testData = {
"pre_checkin" : [
"arcturus/arcturus_Cijk_Ailk_Bjlk_SB.yaml",
"vega20/vega20_Cijk_Ailk_Bjlk_SB.yaml",
"vega10/vega10_Cijk_Ailk_Bjlk_SB.yaml",
"arcturus/arcturus_Cijk_Ailk_Bjlk_BBH.yaml",
"arcturus/arcturus_Cijk_Ailk_Bjlk_HBH.yaml",
"vega20/vega20_Cijk_Ailk_Bjlk_HBH.yaml",
"vega10/vega10_Cijk_Ailk_Bjlk_HBH.yaml",
"hip/hip_Cijk_Ailk_Bjlk_CB.yaml"
],
"quick" : [
"arcturus/arcturus_Cijk_Ailk_Bjlk_SB.yaml",
"vega20/vega20_Cijk_Ailk_Bjlk_SB.yaml",
"vega10/vega10_Cijk_Ailk_Bjlk_SB.yaml"
]
}
parentDir = os.path.dirname(logicDir)
shutil.rmtree(logicDir, ignore_errors=True)
# basically to query the latest zip release weblink, download it and unzip
# selected files to destination folder
cmd = """#!/bin/bash
set -x
wget -nc https://api.github.com/repos/ROCm/rocBLAS/releases/latest
weblink=$(grep -oP '(?<="zipball_url": ")[a-zA-Z:/\.\-0-9]*' latest)
wget -nc $weblink
archive=$(basename $weblink)
rootDir=$(zipinfo -1 $archive | head -n 1)
"""
for schedule in list(testData.keys()):
for f in testData[schedule]:
dir = os.path.join(logicDir, schedule)
Common.ensurePath(dir)
cmd += "unzip -j -d %s -x $archive ${rootDir}%s\n"%(dir, os.path.join(prefix,f))
scriptFile = os.path.join(parentDir,"get_logic.sh")
with open(scriptFile, "w") as file:
file.write(cmd)
os.chmod(scriptFile, 0o777)
subprocess.run(scriptFile, cwd=parentDir, check=True)
@pytest.fixture(scope="session")
def getLogicFileDir(tmp_path_factory, worker_id):
if worker_id == "master":
rootTmpDir = tmp_path_factory.getbasetemp()
destDir = os.path.join(rootTmpDir, "logic_yaml")
downloadLogicFiles(destDir)
else:
rootTmpDir = tmp_path_factory.getbasetemp().parent
destDir = os.path.join(rootTmpDir, "logic_yaml")
lockPath = os.path.join(rootTmpDir, "get_logic.lock")
with FileLock(lockPath):
if not os.path.isdir(destDir):
downloadLogicFiles(destDir)
return destDir
def isSkippedTest(testYamls, mergeFiles, libraryFormat, shortNames, legacyComponents):
if testYamls == "pre_checkin":
# for more extensive tests,
# we run only on single combination of build params
if (mergeFiles == True
and shortNames == False
and libraryFormat == "yaml"
and legacyComponents == False):
return False
else:
return True
elif testYamls == "quick":
return False
else:
assert(False) # should've caught all params already
def str2bool(mergeFiles, shortNames, legacyComponents):
return (True if mergeFiles=="mergeFiles" else False,
True if shortNames=="shortNames" else False,
True if legacyComponents=="legacyComponents" else False)
@pytest.mark.parametrize("testYamls", ["quick", "pre_checkin"])
@pytest.mark.parametrize("mergeFiles", ["mergeFiles", "noMergeFiles"])
@pytest.mark.parametrize("libraryFormat", ["yaml", "msgpack"])
@pytest.mark.parametrize("shortNames", ["shortNames", "noShortName"])
@pytest.mark.parametrize("legacyComponents", ["legacyComponents", "noLegacyComponents"])
def test_integration(useGlobalParameters, builddir, getLogicFileDir,
testYamls, mergeFiles, libraryFormat, shortNames, legacyComponents):
mergeFiles, shortNames, legacyComponents = str2bool(mergeFiles, shortNames, legacyComponents)
if isSkippedTest(testYamls, mergeFiles, libraryFormat, shortNames, legacyComponents):
pytest.skip("only run pre_checkin test in certain combo")
logicFileDir = os.path.join(getLogicFileDir, testYamls)
outputDir = os.path.join(builddir, "lib")
with useGlobalParameters(OutputPath=outputDir,
WorkingPath=outputDir,
MergeFiles=mergeFiles,
LibraryFormat=libraryFormat,
LegacyComponents=legacyComponents,
ShortNames=shortNames,
GenerateManifestAndExit=False
):
Common.ensurePath(outputDir)
createLibraryScript = ClientWriter.getBuildClientLibraryScript(outputDir, logicFileDir)
subprocess.run(createLibraryScript, cwd=outputDir, check=True)
coList = []
libList = []
coExt = "co"
libExt = "yaml" if libraryFormat == "yaml" else "dat"
with open(os.path.join(outputDir,"library","TensileManifest.txt"), "r") as f:
lines = f.read().split("\n")
coList = [line for line in lines if coExt in line]
libList = [line for line in lines if libExt in line]
logicFiles = [os.path.join(logicFileDir, f) for f in os.listdir(logicFileDir) \
if (os.path.isfile(os.path.join(logicFileDir, f)) and os.path.splitext(f)[1]==".yaml")]
clientParametersPaths = []
isaStr = "".join([str(e) for e in Common.globalParameters["CurrentISA"]])
for logicFileName in logicFiles:
(scheduleName, archName, problemType, _, exactLogic, newLibrary) = \
LibraryIO.parseLibraryLogicFile(logicFileName)
problemSizes = ProblemSizesMock(random.sample(exactLogic, min(len(exactLogic), 16))) # sample at most 16 problems
if isaStr in archName:
clientParametersPaths.append(ClientWriter.writeClientConfig(
forBenchmark=False,
solutions=None,
problemSizes=problemSizes,
stepName=str(ProblemType(problemType)),
stepBaseDir=outputDir,
newLibrary=newLibrary,
configBase="ClientParameters_%s_%s"%(scheduleName, str(ProblemType(problemType))),
codeObjectFiles=coList,
tileAwareSelection=False,
libraryFile=libList[0]))
forBenchmark = False
enableTileSelection = False
returncode = ClientWriter.runClient(logicFileDir, forBenchmark, enableTileSelection, clientParametersPaths)
assert(returncode == 0)