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
196 lines
6.9 KiB
Python
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)
|