Files

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

69 строки
2.4 KiB
Python
Исходник Постоянная ссылка Обычный вид История

import json
import argparse
import os
import csv
def parse(json_file, function_name, output_file_name):
with open(json_file, 'r') as f:
data = json.load(f)
kernels=[]
found = False
for entry in data["traceEvents"]:
if 'name'in entry and (entry['name'] == 'hipExtLaunchKernel' or entry['name'] == 'hipLaunchKernel'):
if function_name == 'all':
found = True
kernels.append(entry)
elif function_name in entry['args']['args'] or function_name in entry['name']:
kernels.append(entry)
found = True
if not found:
print('There is no ' + function_name +' in this log')
return
sorted_kernels = sorted(kernels, key=lambda x: (x['args']['BeginNs'], x['args']['pid']))
csv_file_name = output_file_name + '.csv'
json_file_out = output_file_name + '.json'
json_data_out = {}
json_data_out.setdefault('traceEvents',[]).append({})
with open(csv_file_name, 'w', newline='') as csvfile:
fieldnames = ['pid', 'BeginNs', 'dur', 'ts']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
i = 1
for entry in sorted_kernels:
record = {'pid': entry['args']['pid'], 'BeginNs': entry['args']['BeginNs'], 'dur': entry['dur'],
'ts': entry['ts']}
json_data_out.setdefault('traceEvents',[]).append(entry)
writer.writerow(record)
if (i) % 8 == 0:
csvfile.write('\n')
i = 0
i = i + 1
with open(json_file_out, 'w') as jsonfileout:
json.dump(json_data_out, jsonfileout, indent=4)
print(f"Data successfully written to {csv_file_name} and {json_file_out}.")
def main():
parser = argparse.ArgumentParser(description='Json file and the function to parse.')
#parser.add_argument('json_files_path', type=argparse.FileType('r'), help='JSON file to load!')
parser.add_argument('json_file_path', metavar='file_path', type=str, help='Path to the JSON file to process')
parser.add_argument('function_name', type=str, help='Kernel Function Name, e.g., gatherTopK, ncclDevKernel_Generic, mscclKernel')
parser.add_argument('output_file_name', type=str, help='Output File Name')
args = parser.parse_args()
parse(args.json_file_path, args.function_name, args.output_file_name)
if __name__ == '__main__':
main()