Files
TheRock/rocm-libraries/projects/hipblaslt/tensilelite/Tensile/TensileLogic/ValidWorkGroupMappingXCC.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

93 lines
3.8 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.
#
################################################################################
"""
ValidWorkGroupMappingXCC
---
For logic files under a CU-variant directory (e.g. gfx942_38cu), ensures
WorkGroupMappingXCC is -1 or a power-of-two that divides the directory's
CU count. Prevents solutions that would fail WorkgroupMappingXCCCheck at
runtime (e.g. ROCM-2963: XCC=4 with 38 CUs).
"""
import re
from pathlib import Path
# Per-file failure count so we print one full message + one "... N more" per file (not one per solution)
_xcc_failures_by_file = {}
def reset_reported_failures() -> None:
"""Clear per-file failure count so the next run does not reuse old state (e.g. when running in serial)."""
_xcc_failures_by_file.clear()
def _report_xcc_failure(filepath: Path, solution: dict, detail: str) -> None:
key = str(filepath)
count = _xcc_failures_by_file.get(key, 0) + 1
_xcc_failures_by_file[key] = count
if count == 1:
print(f"Error: {detail} (file: {filepath}, index: {solution.get('SolutionIndex', '?')})")
elif count == 2:
print(f" ... (more solutions in this file)")
def _cu_count_from_path(filepath: Path) -> int:
"""Extract CU count from any path component matching *_Ncu (e.g. gfx942_38cu -> 38)."""
for part in filepath.parts:
# Suffix-literal case mutations are equivalent while IGNORECASE is active.
match = re.search(r"_(\d+)cu$", part, re.IGNORECASE) # pragma: no mutate
if match:
return int(match.group(1))
return 0
def _validateWorkGroupMappingXCC(solution: dict, filepath: Path) -> bool:
try:
cu_count = _cu_count_from_path(filepath)
if cu_count <= 0:
return True # Not a CU-variant directory; skip this check
xcc_minus_one = "WorkGroupMappingXCC" not in solution or solution["WorkGroupMappingXCC"] == -1
if xcc_minus_one:
return True
xcc = solution["WorkGroupMappingXCC"]
if xcc <= 0:
_report_xcc_failure(filepath, solution, f"WorkGroupMappingXCC must be -1 or positive (WorkGroupMappingXCC={xcc})")
return False
if (xcc & (xcc - 1)) != 0:
_report_xcc_failure(filepath, solution, f"WorkGroupMappingXCC must be -1 or a power of two (WorkGroupMappingXCC={xcc})")
return False
if cu_count % xcc != 0:
_report_xcc_failure(filepath, solution, f"WorkGroupMappingXCC={xcc} must divide CU count {cu_count}")
return False
return True
except Exception as e:
print(f"Error: ValidWorkGroupMappingXCC failed: {e} (file: {filepath})")
return False