Files
TheRock/rocm-libraries/shared/tensile/Tensile/Tests/unit/test_Component.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

196 lines
6.9 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 pytest
import Tensile.Component as Component
import Tensile.Components as Components
from Tensile.DataType import DataType
def test_PartialMatch():
a = {'foo': True,
'bar': 25,
'baz': {'Enabled': True,
'Debug': False}}
b = {'foo': True}
assert Component.PartialMatch(b, a)
assert not Component.PartialMatch(a, b)
assert not Component.PartialMatch({'foo': False}, a)
assert not Component.PartialMatch({'baz': {"Enabled": False}}, a)
assert Component.PartialMatch({'baz': {"Enabled": True}}, a)
assert not Component.PartialMatch({'baz': {"Error": True}}, a)
assert not Component.PartialMatch({'bar': lambda x: x < 10}, a)
assert Component.PartialMatch({'bar': lambda x: x > 10}, a)
shouldMatch = lambda obj: obj['foo'] and obj['bar'] > 20
shouldNotMatch = lambda obj: obj['foo'] and obj['bar'] < 20
assert Component.PartialMatch(shouldMatch, a)
assert not Component.PartialMatch(shouldNotMatch, a)
class MockWriter:
def __init__(self, **kwargs):
defaultArgs = {'endLine': '\n'}
args = {}
args.update(defaultArgs)
args.update(kwargs)
for k,v in args.items():
setattr(self, k, v)
@pytest.fixture
def vega10():
return {
'asmCaps': {'v_fma_f16': False,
'v_pk_fma_f16': True,
'v_dot2c_f32_f16': False,
'v_dot2_f32_f16': False,
'v_dot4c_i32_i8': False,
'v_dot4_i32_i8': False,
"v_mad_mix_f32": True,
"v_fma_mix_f32": False,
"v_mac_f32": True,
"v_fma_f32": True,
"v_fmac_f32": False,
}
}
@pytest.fixture
def navi10():
return {
'asmCaps': {'v_fma_f16': True,
'v_pk_fma_f16': False,
'v_dot2c_f32_f16': False,
'v_dot2_f32_f16': False,
'v_dot4c_i32_i8': False,
'v_dot4_i32_i8': False,
"v_mad_mix_f32": False,
"v_fma_mix_f32": True,
"v_mac_f32": True,
"v_fma_f32": True,
"v_fmac_f32": True}
}
@pytest.fixture
def navi12():
return {
'asmCaps': {'v_fma_f16': False,
'v_pk_fma_f16': False,
'v_dot2c_f32_f16': True,
'v_dot2_f32_f16': True,
'v_dot4c_i32_i8': True,
'v_dot4_i32_i8': True,
"v_mad_mix_f32": False,
"v_fma_mix_f32": True,
"v_mac_f32": True,
"v_fma_f32": True,
"v_fmac_f32": True}
}
@pytest.fixture
def f16():
return {
'kernel': {"ProblemType": {"DataType": DataType(DataType.half),
"HighPrecisionAccumulate": False},
"AggressivePerfMode": True,
"LocalDotLayout": 1,
"InnerUnroll": 1,
"ThreadTile0": 4,
"ThreadTile1": 4}
}
@pytest.fixture
def f16_hpa():
return {
'kernel': {"ProblemType": {"DataType": DataType(DataType.half),
"HighPrecisionAccumulate": True},
"AggressivePerfMode": True,
"LocalDotLayout": 1,
"InnerUnroll": 1,
"ThreadTile0": 4,
"ThreadTile1": 4}
}
@pytest.fixture
def f16_hpa_ldl():
return {
'kernel': {"ProblemType": {"DataType": DataType(DataType.half),
"HighPrecisionAccumulate": True},
"AggressivePerfMode": True,
"LocalDotLayout": 2,
"InnerUnroll": 2,
"ThreadTile0": 4,
"ThreadTile1": 4}
}
#navi = MockWriter(asmCaps = {'v_fma_f16': True,
# 'v_pk_fma_f16': False},
# kernel = {"ProblemType": {"DataType": DataType(DataType.half),
# "HighPrecisionAccumulate": False},
# "AggressivePerfMode": True,
# "ThreadTile0": 4,
# "ThreadTile1": 4},
# endLine = '\n')
def test_find(navi10, f16):
writer = MockWriter(**navi10, **f16)
found = Component.MAC.find(writer)
assert isinstance(found, Components.MAC_F16.FMA_F16_NonPacked)
def test_find2(vega10, f16_hpa):
writer = MockWriter(**vega10, **f16_hpa)
found = Component.MAC.find(writer)
assert isinstance(found, Components.MAC_F16_HPA.FMA_F16_HPA_MAD_MIX)
def test_MAC_F16_FMA_NonPacked(navi10, f16):
writer = MockWriter(**navi10, **f16)
found = Component.MAC.find(writer)
kernelText = found(writer, 2, 4)
print(kernelText)
def test_componentPath():
assert Components.MAC_F16.FMA_F16_NonPacked.componentPath() == ["Component", "MAC", "FMA_F16_NonPacked"]
def test_find_macs(useGlobalParameters, f16, f16_hpa, f16_hpa_ldl):
with useGlobalParameters() as globals:
for dtype in [f16, f16_hpa, f16_hpa_ldl]:
for arch in globals["SupportedISA"]:
writer = MockWriter(asmCaps=globals["AsmCaps"][arch], archCaps=globals["ArchCaps"][arch], **dtype)
found = Component.MAC.find(writer, True)
# No HPA on 803, every other combination should work though.
if arch != (8,0,3) or (dtype != f16_hpa and dtype != f16_hpa_ldl):
assert isinstance(found, Component.MAC)
print(dtype, arch, found)