TUHs's picture
Upload 207 files
29b9c56
# coding: utf-8
import pandas as pd
import numpy as np
import argparse
from io import StringIO
parser = argparse.ArgumentParser(description='Prof parser')
parser.add_argument('file', type=str)
# Strip the whitespace on reading
def strip(text):
try:
return text.strip()
except AttributeError:
return text
def convert(x):
if x[-2:] == 'ms':
x = float(x[:-2])
elif x[-2:] == 'us':
x = 0.001 * float(x[:-2])
elif x[-2:] == 'ns':
x = 1e-6 * float(x[:-2])
elif x[-1] == 's':
x = 1000 * float(x[:-1])
return x
def convert_timep(x):
return float(x[:-1])
def pandify(data):
names = ['Type', 'Time (%)', 'Time (ms)', 'Calls', 'Avg', 'Min', 'Max',
'Name']
convs = {i: strip for i in range(8)}
df = pd.read_csv(StringIO(data), names=names, skiprows=0, sep=';',
converters=convs)
df.loc[df.loc[:,'Type'] == '', 'Type'] = np.NaN
df = df.fillna(method='ffill')
df['Time (ms)'] = df['Time (ms)'].apply(convert)
df['Time (%)'] = df['Time (%)'].apply(convert_timep)
df['Calls'] = df['Calls'].apply(int)
df1 = df[df['Type'] == 'GPU activities:']
df2 = df[df['Type'] == 'API calls:']
idx = df1.Name.str.contains('CUDA memcpy')
s1 = pd.Series({'Type': 'Total:',
'Time (%)': df1['Time (%)'].sum(),
'Time (ms)': df1['Time (ms)'].sum(),
'Calls': df1['Calls'].sum(),
'Avg': '', 'Min': '', 'Max': '', 'Name': ''})
s2 = pd.Series({'Type': 'Total (no mem):',
'Time (%)': df1.loc[~idx, 'Time (%)'].sum(),
'Time (ms)': df1.loc[~idx, 'Time (ms)'].sum(),
'Calls': df1.loc[~idx, 'Calls'].sum(),
'Avg': '', 'Min': '', 'Max': '', 'Name': ''})
s3 = pd.Series({'Type': 'Total:',
'Time (%)': df2['Time (%)'].sum(),
'Time (ms)': df2['Time (ms)'].sum(),
'Calls': df2['Calls'].sum(),
'Avg': '', 'Min': '', 'Max': '', 'Name': ''})
df3 = pd.concat([df1, pd.concat([s1, s2], axis=1).T,
df2, pd.concat([s3,], axis=1).T],
ignore_index=True, axis=0)
return df3
def prep_file(file):
with open(file, 'r') as f:
data = f.readlines()
header = data[0].split('command: ')[1]
for i, l in enumerate(data):
if i >= 3:
data[i] = ';'.join([l[:16], l[17:25], l[26:35], l[36:45],
l[46:55], l[56:65], l[66:75], l[76:]])
data = ''.join(data[4:])
return data, header
if __name__ == '__main__':
args = parser.parse_args()
data, header = prep_file(args.file)
df = pandify(data)
with open(args.file, 'w') as f:
f.write(header)
f.write(df.to_string(index=False))