Files
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

170 lines
5.9 KiB
Python

# Copyright Advanced Micro Devices, Inc.
# SPDX-License-Identifier: MIT
"""
MIOpen Driver Convolution Functional Test
Tests MIOpenDriver convolution operations (Forward and Backward) to ensure
correct functionality across different GPU architectures.
"""
import json
import shlex
import sys
from pathlib import Path
from typing import Any, Dict, List
sys.path.insert(0, str(Path(__file__).resolve().parents[2])) # For utils
sys.path.insert(0, str(Path(__file__).resolve().parent)) # For functional_base
from functional_base import FunctionalBase, run_functional_main
from utils.logger import log
from utils.exceptions import TestExecutionError
from github_actions_api import get_first_gpu_architecture
class MIOpenDriverConvTest(FunctionalBase):
"""MIOpen Driver convolution functional test."""
def __init__(self):
super().__init__(
test_name="miopen_driver_conv", display_name="MIOpen Driver Convolution"
)
self.results_json = self.script_dir / "miopendriver_conv_results.json"
# Load test configurations from JSON
config = self.load_config("miopendriver_conv.json")
# Parse test suites
test_suites = config.get("test_suites", {})
self.tests_cmd = {}
self.tests_list = []
for suite_name, suite_config in test_suites.items():
self.tests_list.append(suite_name)
self.tests_cmd[suite_name] = suite_config.get("commands", [])
# Load GPU-specific flags
self.gpu_specific_flags = config.get("gpu_specific_flags", {})
def run_tests(self) -> None:
"""Run MIOpen driver convolution tests and save results to JSON."""
log.info(f"Running {self.display_name} Tests")
# Detect GPU architecture
gfx_id = get_first_gpu_architecture(therock_bin_dir=self.therock_bin_dir)
miopen_driver = Path(self.therock_bin_dir) / "MIOpenDriver"
if not miopen_driver.exists():
raise TestExecutionError(
f"MIOpenDriver not found at {miopen_driver}\n"
f"Ensure MIOpen is installed correctly"
)
# Setup environment with LD_LIBRARY_PATH for ROCm libraries
env = self.get_rocm_env()
# Calculate total number of tests for progress indicator
total_tests = sum(len(self.tests_cmd[suite]) for suite in self.tests_list)
current_test = 0
log.info(f"Total {self.display_name} tests to run: {total_tests}")
# Store results as we execute
all_results = []
for test_suite in self.tests_list:
log.info(f"Running test suite: {test_suite}")
for i, cmd_str in enumerate(self.tests_cmd[test_suite], 1):
current_test += 1
# Build full command with MIOpenDriver path
full_cmd = f"{miopen_driver} {cmd_str}"
# Add GPU-specific flags if needed
if "Backward_Conv" in test_suite and gfx_id in self.gpu_specific_flags:
backward_flags = self.gpu_specific_flags[gfx_id].get(
"backward_flags", ""
)
full_cmd = f"{full_cmd} {backward_flags}"
cmd = shlex.split(full_cmd)
# Progress indicator
test_case_name = f"{test_suite}_case{i}"
log.info(f"[{current_test}/{total_tests}] Running {test_case_name}")
error_message = None
try:
return_code = self.execute_command(cmd, env=env)
except Exception as e:
log.error(f"Error running command: {e}")
error_message = str(e)
return_code = -1
# Determine status based on return code
status = "PASS" if return_code == 0 else "FAIL"
# Store result immediately
result = {
"test_suite": test_suite,
"test_case": test_case_name,
"command": cmd_str,
"command_index": i,
"return_code": return_code,
"status": status,
}
if error_message:
result["error"] = error_message
all_results.append(result)
log.info(f"[{current_test}/{total_tests}] {test_case_name}: {status}")
# Write all results to JSON file
with open(self.results_json, "w") as f:
json.dump(all_results, f, indent=2)
log.info(f"{self.display_name} results saved to {self.results_json}")
log.info(f"{self.display_name} test execution complete")
def parse_results(self) -> List[Dict[str, Any]]:
"""Parse test results from JSON file.
Returns:
List of test result dictionaries
"""
log.info(f"Parsing {self.display_name} Results")
try:
with open(self.results_json, "r") as f:
json_results = json.load(f)
except FileNotFoundError:
raise TestExecutionError(
f"Results JSON file not found: {self.results_json}\n"
f"Ensure tests were executed successfully"
)
except json.JSONDecodeError as e:
raise TestExecutionError(
f"Error parsing results JSON: {e}\n"
f"Check if results file is valid JSON"
)
test_results = []
for result in json_results:
test_results.append(
self.create_test_result(
test_name=self.test_name,
subtest_name=result["test_case"],
status=result["status"],
suite=result["test_suite"],
command_index=result.get("command_index"),
command=result.get("command", ""),
)
)
return test_results
if __name__ == "__main__":
run_functional_main(MIOpenDriverConvTest())