Dosyalar
rocm-systems/projects/rccl/tools/scripts/rocprof-log-parser.py
T

.git-blame-ignore-revs dosyasındaki sürümler yok sayılıyor. Bunun yerine normal sorumlu görüntüsü için buraya tıklayın.

69 satır
2.4 KiB
Python
Ham Normal Görünüm Geçmiş

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()