22# Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
33# SPDX-License-Identifier: MIT
44
5- import sys
65import json
76import subprocess
8- import argparse
97import csv
10- import time
118from pathlib import Path
12- from typing import List , Dict , Tuple , Optional
9+ from typing import List , Dict , Optional
1310
1411
15- def run_kernel (build_dir : Path , kernel_path : Path , params : Dict [str , str ], verbose : bool = False ) -> Optional [Dict ]:
12+ def run_kernel (
13+ build_dir : Path , kernel_path : Path , params : Dict [str , str ], verbose : bool = False
14+ ) -> Optional [Dict ]:
1615 """Run a single kernel with given parameters and save output to individual JSON file"""
1716 # Create results directory
1817 results_dir = build_dir / "results"
@@ -59,6 +58,7 @@ def run_kernel(build_dir: Path, kernel_path: Path, params: Dict[str, str], verbo
5958 print (f"Error running { kernel_path .name } : { e } " )
6059 return None
6160
61+
6262def parse_json_file (json_file : Path , verbose : bool = False ) -> Optional [Dict ]:
6363 """Parse JSON data from individual kernel output file"""
6464 try :
@@ -88,9 +88,8 @@ def parse_json_file(json_file: Path, verbose: bool = False) -> Optional[Dict]:
8888 print (f"Error reading JSON file { json_file } : { e } " )
8989 return None
9090
91- def find_best_kernel (
92- results : List [Dict ], metric : str = "tflops"
93- ) -> Optional [Dict ]:
91+
92+ def find_best_kernel (results : List [Dict ], metric : str = "tflops" ) -> Optional [Dict ]:
9493 """Find the best performing kernel based on metric"""
9594 if not results :
9695 return None
@@ -126,7 +125,8 @@ def export_csv(results: List[Dict], filename: str, verbose: bool = False):
126125
127126 print (f"Results exported to { filename } " )
128127
129- def export_best_kernels ( best_kernels : Dict , filename : str , verbose : bool = False ):
128+
129+ def export_best_kernels (best_kernels : Dict , filename : str , verbose : bool = False ):
130130 """Export best kernel selections to file"""
131131 with open (filename , "w" ) as f :
132132 f .write ("# Best kernel selections\n " )
@@ -141,7 +141,10 @@ def export_best_kernels( best_kernels: Dict, filename: str, verbose: bool = Fals
141141
142142 print (f"Best kernels exported to { filename } " )
143143
144- def export_json (results : List [Dict ], filename : str , best_kernels : Dict = None , verbose : bool = False ):
144+
145+ def export_json (
146+ results : List [Dict ], filename : str , best_kernels : Dict = None , verbose : bool = False
147+ ):
145148 """Export all results and best kernels to JSON with comprehensive metadata"""
146149 from datetime import datetime
147150
@@ -223,9 +226,7 @@ def export_json(results: List[Dict], filename: str, best_kernels: Dict = None, v
223226 "benchmark_metadata" : {
224227 "timestamp" : datetime .now ().isoformat (),
225228 "total_kernels_tested" : len (results ),
226- "unique_kernels" : len (
227- set (r .get ("name" , "unknown" ) for r in results )
228- ),
229+ "unique_kernels" : len (set (r .get ("name" , "unknown" ) for r in results )),
229230 "successful_runs" : len (successful_results ),
230231 "failed_runs" : len (results ) - len (successful_results ),
231232 },
@@ -265,9 +266,7 @@ def export_json(results: List[Dict], filename: str, best_kernels: Dict = None, v
265266 "by_scheduler" : scheduler_stats ,
266267 "by_data_type" : data_type_stats ,
267268 },
268- "total_problem_configurations" : len (best_kernels )
269- if best_kernels
270- else 0 ,
269+ "total_problem_configurations" : len (best_kernels ) if best_kernels else 0 ,
271270 },
272271 "kernel_results" : results ,
273272 "best_kernels_by_problem" : best_kernels or {},
@@ -282,4 +281,3 @@ def export_json(results: List[Dict], filename: str, best_kernels: Dict = None, v
282281 print (f" - Best TFLOPS: { max (tflops_values , default = 0 ):.2f} " )
283282 print (f" - Best bandwidth: { max (bandwidth_values , default = 0 ):.2f} GB/s" )
284283 print (f" - Best latency: { min (latency_values , default = 0 ):.2f} ms" )
285-
0 commit comments