Files
TheRock/rocm-libraries/projects/hipblaslt/tensilelite/Tensile/Tests/unit/test_TensileLibLogicToYaml.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

494 lines
14 KiB
Python

################################################################################
#
# Copyright (C) 2025 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 pytest
from unittest.mock import mock_open, patch
import sys
import os
import tempfile
import filecmp
from Tensile import TensileLibLogicToYaml
# Test data
VALID_LIBLOGIC_FILE_CONTENT = """
- {MinimumRequiredVersion: 5.0.0}
- gfx950
- gfx950
- [Device 75a0]
- Activation: true
ActivationComputeDataType: 0
ActivationNoGuard: false
ActivationType: none
AllowNoFreeDims: false
AssignedDerivedParameters: true
Batched: true
BetaOnlyUseBias: false
BiasDataTypeList: [0, 7]
BiasSrc: D
ComplexConjugateA: false
ComplexConjugateB: false
ComputeDataType: 0
DataType: 7
DataTypeA: 7
DataTypeAmaxD: 0
DataTypeB: 7
DataTypeE: 7
DestDataType: 7
F32XdlMathOp: 0
Gradient: false
GroupedGemm: false
HighPrecisionAccumulate: true
Index0: 0
Index01A: 0
Index01B: 1
Index1: 1
IndexAssignmentsA: [3, 0, 2]
IndexAssignmentsB: [3, 1, 2]
IndexAssignmentsLD: [4, 5, 6, 7]
IndexAssignmentsMetadata: [3, 0, 2]
IndexUnroll: 3
IndexUnrollA: 0
IndexUnrollB: 0
IndexUnrollM: 0
IndicesBatch: [2]
IndicesFree: [0, 1]
IndicesSummation: [3]
MirrorDimsA: []
MirrorDimsB: []
MirrorDimsMetadata: []
NumIndicesBatch: 1
NumIndicesC: 3
NumIndicesFree: 2
NumIndicesLD: 4
NumIndicesSummation: 1
OperationType: GEMM
OutputAmaxD: false
SetConstStrideA: []
SetConstStrideB: []
SetConstStrideBias: []
SilentHighPrecisionAccumulate: false
Sparse: 0
StochasticRounding: false
StridedBatched: true
SupportUserArgs: true
SwizzleTensorA: false
SwizzleTensorB: false
TLUA: false
TLUB: false
Tensor0: 0
Tensor1: 1
TileA: 0
TileAwareSelection: false
TileB: 1
TotalIndices: 4
TransposeA: true
TransposeB: false
UseBeta: true
UseBias: 1
UseE: false
UseInitialStridesAB: false
UseInitialStridesCD: false
UseScaleAB: ''
UseScaleAlphaVec: 1
UseScaleCD: false
- - 1LDSBuffer: 0
ActivationAlt: false
ActivationFuncCall: false
ActivationFused: true
AdaptiveGemm: 0
AssertAIGreaterThanEqual: -1
AssertAILessThanEqual: -1
AssertFree0ElementMultiple: 1
AssertFree1ElementMultiple: 1
AssertSummationElementMultiple: 1
AssignedDerivedParameters: true
AssignedProblemIndependentDerivedParameters: true
BaseName: Cijk_Alik_Bljk_BBS_BH_Bias_SAV_UserArgs_MT96x96xQmnABcT7HWcD6o5PKlLr1Vf4E4hlypHXHNWsDqsqxdQ=
BufferLoad: true
BufferStore: true
CUCount: null
CUOccupancy: -1
ClusterLocalRead: 0
CodeObjectVersion: '4'
ConvertAfterDS: false
CustomKernelName: ''
DebugStreamK: 0
DepthU: 128
DirectToLds: false
DirectToLdsA: false
DirectToLdsB: false
DirectToVgprA: false
DirectToVgprB: false
DirectToVgprSparseMetadata: false
EdgeType: ShiftPtr
EnableF32XdlMathOp: false
EnableMatrixInstruction: true
ExpandPointerSwap: 0
ExpertSchedulingMode: 0
ForceDisableShadowInit: false
ForceUnrollSubIter: false
GlobalReadPerMfma: 1
GlobalReadVectorWidthA: 8
GlobalReadVectorWidthB: 8
GlobalSplitU: 0
GlobalSplitUAlgorithm: MultipleBuffer
GlobalSplitUCoalesced: false
GlobalSplitUWorkGroupMappingRoundRobin: false
GlobalWriteVectorWidth: 1
GroupLoadStore: false
GuaranteeNoPartialA: true
GuaranteeNoPartialB: true
GuaranteeNoPartialMetadata: true
ISA: [9, 5, 0]
InnerUnroll: 1
InterleaveAlpha: 0
InternalSupportParams: {KernArgsVersion: 2, SupportCustomStaggerU: true, SupportCustomWGM: true,
SupportUserGSU: false, UseSFC: false, UseUniversalArgs: true}
Kernel: true
KernelLanguage: Assembly
KernelNameMin: Cijk_Alik_Bljk_BBS_BH_Bias_SAV_UserArgs_MT96x96x128_MI16x16x1_SN_LDSB0_AFC0_AG0_AFEM1_AFEM1_ASEM1_CLR0_CADS0_DTLA0_DTLB0_DTVA0_DTVB0_EPS0_FDSI0_GRPM1_GRVWA8_GRVWB8_GSU0_GSUAMB_GLS0_ISA950_IU1_K1_LDSTI0_LBSPPA256_LBSPPB256_LBSPPM0_LPA16_LPB16_LPM0_LRVW8_LWPMn1_MIAV0_MIWT3_3_MO40_NTn1_NTA2_NTB7_NTC0_NTD4_NTM0_NEPBS0_NLCA1_NLCB1_ONLL1_PGR2_PLR1_PKA1_SIA3_SS1_SPO1_SRVW0_SSO4_SVW1_SK3_SKFTR0_SKXCCM8_TLDS2_ULSGRO0_USL1_UIOFGRO0_USFGRO1_VSn1_VWA1_VWB1_WSGRA0_WSGRB0_WS64_WG32_8_1
LDSTrInst: false
LSCA: 128
LSCB: 128
LSPA: 16
LSPB: 16
LVCA: 16
LVCB: 16
LVPA: 2
LVPB: 2
LdsBlockSizePerPadA: 256
LdsBlockSizePerPadB: 256
LdsBlockSizePerPadMetadata: 0
LdsBytesNoAmax: 120832
LdsInitCVgprs: false
LdsNumBytes: 120832
LdsNumElementsAlignedA: 27648
LdsNumElementsAlignedB: 27648
LdsNumElementsAlignedMetadata: 0
LdsOffsetA: 0
LdsOffsetA_Blk: 65536
LdsOffsetB: 27648
LdsOffsetB_Blk: 93184
LdsOffsetBias: 0
LdsOffsetBiasGSU: 0
LdsOffsetBiasNonGSU: 0
LdsOffsetMetadata: 27648
LdsOffsetMetadata_Blk: 93184
LdsPadA: 16
LdsPadB: 16
LdsPadMetadata: 0
LocalReadVectorWidth: 8
LocalSplitU: 1
LocalSplitUReuseLDS: 1
LocalWritePerMfma: -1
LocalWriteUseSgprA: false
LocalWriteUseSgprB: false
LoopIters: 4
LoopUnroll: 128
MFMA_BF16_1K: false
MIArchVgpr: 0
MIBlock: [16, 16, 32, 1, 1, 1]
MIInputPerThread: 8
MIInputPerThreadA: 8
MIInputPerThreadB: 8
MIInputPerThreadMetadata: 8
MIOutputVectorWidth: 4
MIRegPerOut: 1
MIWaveGroup: [2, 2]
MIWaveTile: [3, 3]
MIWaveTileA: 3
MIWaveTileB: 3
MIWaveTileMetadata: 0
MacroTile0: 96
MacroTile1: 96
MacroTileA: 96
MacroTileB: 96
MagicDivAlg: 2
MathClocksUnrolledLoop: 0
MatrixInstB: 1
MatrixInstBM: 1
MatrixInstBN: 1
MatrixInstK: 32
MatrixInstM: 16
MatrixInstN: 16
MatrixInstruction: [16, 16, 32, 1]
MaxLDS: 163840
MaxOccupancy: 40
MbskPrefetchMethod: 0
MfmaInitCVgprs: false
NoLdsWriteCode: false
NoReject: false
NoTailLoop: false
NonDTLTailLoopA: true
NonDTLTailLoopB: true
NonTemporal: -1
NonTemporalA: 2
NonTemporalB: 7
NonTemporalC: 0
NonTemporalD: 4
NonTemporalE: 0
NonTemporalMetadata: 0
NonTemporalWS: 0
NumElementsPerBatchStore: 0
NumElementsPerThread: 36
NumGlobalWriteVectorsPerThread: 36
NumLoadsA: 6
NumLoadsB: 6
NumLoadsCoalescedA: 1
NumLoadsCoalescedB: 1
NumLoadsPerpendicularA: 6
NumLoadsPerpendicularB: 6
NumThreads: 256
NumTotalPackedLoadsA: -1
NumTotalPackedLoadsB: -1
NumWaveSplitK: 1
OptNoLoadLoop: 1
PackedC0IdxChars: [I]
PackedC0IndicesX: [0]
PackedC1IdxChars: [J]
PackedC1IndicesX: [1]
PrefetchGlobalRead: 2
PrefetchLocalRead: 1
PreloadKernArgs: true
SFCWGM:
- [1, 1]
- [1, 1]
ScheduleGlobalRead: 1
ScheduleIterAlg: 3
ScheduleLocalWrite: 1
SolutionIndex: 0
SolutionNameMin: Cijk_Alik_Bljk_BBS_BH_Bias_SAV_UserArgs_MT96x96x128_MI16x16x1_SN_LDSB0_AFC0_AG0_AFEM1_AFEM1_ASEM1_CLR0_CADS0_DTLA0_DTLB0_DTVA0_DTVB0_EPS0_FDSI0_GRPM1_GRVWA8_GRVWB8_GSU0_GSUAMB_GSUC0_GSUWGMRR0_GLS0_ISA950_IU1_K1_LDSTI0_LBSPPA256_LBSPPB256_LBSPPM0_LPA16_LPB16_LPM0_LRVW8_LWPMn1_MIAV0_MIWT3_3_MO40_NTn1_NTA2_NTB7_NTC0_NTD4_NTM0_NEPBS0_NLCA1_NLCB1_ONLL1_PGR2_PLR1_PKA1_SIA3_SS1_SU8_SUM0_SUS256_SPO1_SRVW0_SSO4_SVW1_SK3_SKFTR0_SKXCCM8_TLDS2_ULSGRO0_USL1_UIOFGRO0_USFGRO1_VSn1_VWA1_VWB1_WSGRA0_WSGRB0_WS64_WG32_8_1_WGM1_WGMXCC2_WGMXCCGn1
SourceSwap: 1
SpaceFillingAlgo: []
StaggerU: 8
StaggerUMapping: 0
StaggerUStride: 256
StorePriorityOpt: 1
StoreRemapVectorWidth: 0
StoreSwapAddr: false
StoreSyncOpt: 4
StoreVectorWidth: 1
StreamK: 3
StreamKAtomic: 0
StreamKFixupTreeReduction: 0
StreamKXCCMapping: 8
SubGroup0: 8
SubGroup1: 32
SubGroupA: 8
SubGroupB: 32
SuppressNoLoadLoop: false
SwapGlobalReadOrder: false
ThreadTile: [1, 1]
ThreadTile0: 12
ThreadTile1: 3
ThreadTileA: 12
ThreadTileB: 3
TransposeLDS: 2
TransposeLDSMetadata: 1
ULSGRODoubleG2L: 0
UnrollLoopSwapGlobalReadOrder: 0
UnrollMajorLDSA: 1
UnrollMajorLDSB: 1
UnrollMajorLDSMetadata: true
Use64bShadowLimit: 1
UseCustomMainLoopSchedule: 0
UseDirect32XEmulation: false
UseDot2F32XEmulation: false
UseDotInstruction: false
UseF32XEmulation: false
UseGeneralizedNLCOneA: false
UseGeneralizedNLCOneB: false
UseGeneralizedNLCOneMetadata: false
UseInstOffsetForGRO: 0
UsePLRPack: false
UseSgprForGRO: 1
Valid: true
VectorStore: -1
VectorWidthA: 1
VectorWidthB: 1
WaveSeparateGlobalReadA: 0
WaveSeparateGlobalReadB: 0
WaveSeparateGlobalReadMetadata: 0
WaveSplitK: false
WavefrontSize: 64
WorkGroup: [32, 8, 1]
WorkGroupMapping: 1
WorkGroupMappingXCC: 2
WorkGroupMappingXCCGroup: -1
WorkGroupReduction: false
WorkspaceCheck: [4, 0, 0]
_DepthU: 128
_DepthUA: 128
_DepthUB: 128
_DepthUMetadata: 128
_GlobalAccumulation: PartialsBuffer
_UseSgprForGRO: 1
_VectorStore: 1
_WorkspaceSizePerElemBias: 0
_WorkspaceSizePerElemC: 4
_staggerStrideShift: 0
enableGLTrA: false
enableGLTrB: false
enableLDSTrA: false
enableLDSTrB: false
numSubTiles: 1
reorderGRInstForDTVA: false
reorderGRInstForDTVB: false
tailLoopOptA: true
tailLoopOptB: true
- [2, 3, 0, 1]
- - - [768, 3072, 1, 3840, 768, 768, 3840, 3840]
- [0, 0.0]
- null
- null
- DeviceEfficiency
- GridBased
"""
VALID_CONFIG_FILE_CONTENT = """GlobalParameters:
MinimumRequiredVersion: 5.0.0
SleepPercent: 0
KernelTime: true
NumElementsToValidate: 0
DataInitTypeBeta: 1
DataInitTypeAlpha: 1
DataInitTypeA: 12
DataInitTypeB: 13
DataInitTypeC: 12
DataInitTypeD: 12
PreciseKernelTime: false
Device: 0
SkipSlowSolutionRatio: 0.0
KeepBuildTmp: false
BenchmarkProblems:
- - OperationType: GEMM
Activation: true
Batched: true
ComputeDataType: 0
DataType: 7
DataTypeA: 7
DataTypeB: 7
DataTypeE: 7
DestDataType: 7
HighPrecisionAccumulate: true
IndexAssignmentsA: [3, 0, 2]
IndexAssignmentsB: [3, 1, 2]
IndexAssignmentsLD: [4, 5, 6, 7]
NumIndicesC: 3
TransposeA: true
TransposeB: false
UseBias: 1
UseScaleAlphaVec: 1
- InitialSolutionParameters:
BenchmarkCommonParameters:
- KernelLanguage: [Assembly]
ForkParameters:
- ActivationFuncCall: [false]
- ClusterLocalRead: [0]
- DepthU: [128]
- ExpandPointerSwap: [0]
- GlobalReadVectorWidthA: [8]
- GlobalReadVectorWidthB: [8]
- GlobalSplitU: [0]
- LdsBlockSizePerPadA: [256]
- LdsBlockSizePerPadB: [256]
- LdsPadA: [16]
- LdsPadB: [16]
- LocalReadVectorWidth: [8]
- MaxLDS: [163840]
- MbskPrefetchMethod: [0]
- NonTemporalA: [2]
- NonTemporalB: [7]
- NonTemporalD: [4]
- PrefetchGlobalRead: [2]
- SourceSwap: [1]
- StaggerU: [8]
- StorePriorityOpt: [1]
- StoreSyncOpt: [4]
- StoreVectorWidth: [1]
- StreamK: [3]
- StreamKXCCMapping: [8]
- ThreadTile: [[1, 1]]
- TransposeLDS: [2]
- TransposeLDSMetadata: [1]
- UseCustomMainLoopSchedule: [0]
- UseSgprForGRO: [1]
- VectorWidthA: [1]
- VectorWidthB: [1]
- WavefrontSize: [64]
- WorkGroupMapping: [1]
- WorkGroupMappingXCC: [2]
- Groups:
- - MatrixInstruction: [16, 16, 32, 1, 1, 3, 3, 2, 2]
WorkGroup: [32, 8, 1]
MIArchVgpr: 0
BenchmarkJoinParameters:
BenchmarkFinalParameters:
- ProblemSizes:
- Exact: [768, 3072, 1, 3840, 768, 768, 3840, 3840]
- BiasTypeArgs: [0, 7]
LibraryLogic:
ScheduleName: "gfx950"
DeviceNames: ["Device 75a0"]
ArchitectureName: "gfx950"
"""
@pytest.fixture
def mockLibLogicFile():
with patch(
"builtins.open", mock_open(read_data=VALID_LIBLOGIC_FILE_CONTENT)
) as mockFile:
yield mockFile
def findAvailableArchs():
from Tensile.Tests.gpu_detection import get_available_archs
return get_available_archs()
@pytest.mark.skipif(
"gfx950" not in findAvailableArchs(), reason="Requires gfx950 architecture"
)
def test_TensileLibLogicToYaml():
solutionIndex = 0
with tempfile.NamedTemporaryFile("w+", delete=False) as f:
f.write(VALID_LIBLOGIC_FILE_CONTENT)
f.flush()
libLogicFileName = f.name
with tempfile.TemporaryDirectory() as WORKSPACE:
configYaml = os.path.join(WORKSPACE, "config.yaml")
TensileLibLogicToYaml.TensileLibLogicToYaml(
libLogicFileName, solutionIndex, configYaml, False
)
with tempfile.NamedTemporaryFile("w+", delete=False) as f:
f.write(VALID_CONFIG_FILE_CONTENT)
f.flush()
configFileName = f.name
assert filecmp.cmp(configYaml, configFileName, shallow=False)