|
42 | 42 | "metric_id": "4.1.8", |
43 | 43 | "csv_file": "4.1_Roofline_Performance_Rates.csv", |
44 | 44 | "column": "Value", |
45 | | - "expected_value": 1044.48, |
| 45 | + "expected_values": [1044.48], |
46 | 46 | }, |
47 | 47 | ], |
48 | 48 | "MI200": [ |
|
51 | 51 | "metric_id": "4.1.8", |
52 | 52 | "csv_file": "4.1_Roofline_Performance_Rates.csv", |
53 | 53 | "column": "Value", |
54 | | - "expected_value": 1389.17, |
| 54 | + "expected_values": [1389.17], |
55 | 55 | }, |
56 | 56 | ], |
57 | 57 | "MI300": [ |
|
60 | 60 | "metric_id": "4.1.9", |
61 | 61 | "csv_file": "4.1_Roofline_Performance_Rates.csv", |
62 | 62 | "column": "Value", |
63 | | - "expected_value": 3910.62, |
| 63 | + # MI 300 series contains MI325X GPU which |
| 64 | + # uses improved HBM3E instead of HBM3 used in |
| 65 | + # MI300X GPU. Hence, multiple expected values |
| 66 | + # to cover both cases. |
| 67 | + "expected_values": [3910.62, 4287.31], |
64 | 68 | }, |
65 | 69 | ], |
66 | 70 | "MI350": [ |
|
69 | 73 | "metric_id": "4.1.10", |
70 | 74 | "csv_file": "4.1_Roofline_Performance_Rates.csv", |
71 | 75 | "column": "Value", |
72 | | - "expected_value": 5690.42, |
| 76 | + "expected_values": [5690.42], |
73 | 77 | }, |
74 | 78 | ], |
75 | 79 | # Ignore warmup dispatch |
@@ -131,13 +135,17 @@ def test_validate_metrics( |
131 | 135 | actual = pd.read_csv(f"{analysis_workload_dir}/{metric['csv_file']}")[ |
132 | 136 | metric["column"] |
133 | 137 | ].values[0] |
134 | | - expected = metric["expected_value"] |
135 | | - # 5% tolerance in checking |
136 | | - assert abs(actual - expected) / expected <= 0.05, ( |
| 138 | + expected_values = metric["expected_values"] |
| 139 | + # 5% tolerance in checking - assert if actual matches any expected value |
| 140 | + matches = [ |
| 141 | + abs(actual - expected) / expected <= 0.05 |
| 142 | + for expected in expected_values |
| 143 | + ] |
| 144 | + diffs = [(abs(actual - exp) / exp * 100) for exp in expected_values] |
| 145 | + assert any(matches), ( |
137 | 146 | f"{metric['name']} ({metric['metric_id']}): " |
138 | | - f"actual={actual}, expected={expected}, " |
139 | | - f"diff={(abs(actual - expected) / expected * 100):.2f}% " |
140 | | - f"(tolerance: 5%)" |
| 147 | + f"actual={actual}, expected_values={expected_values}, " |
| 148 | + f"diffs={diffs} (tolerance: 5%)" |
141 | 149 | ) |
142 | 150 | finally: |
143 | 151 | test_utils.clean_output_dir(config["cleanup"], analysis_workload_dir) |
|
0 commit comments