diff --git a/bin/calculate_floprate.py b/bin/calculate_floprate.py index c168643db4c2d2359d22d39ef15d7e7ccd137fc9..d149d2b0b2b48ac62c55b4e1e9e91f64336320e4 100755 --- a/bin/calculate_floprate.py +++ b/bin/calculate_floprate.py @@ -1,31 +1,40 @@ #!/usr/bin/env python +import os import pandas +import re + + +def join_csv_files(): + with open('timings.csv', 'w') as out: + for f in os.listdir(os.getcwd()): + match = re.match(".*rank-([0-9]*).csv", f) + if match: + for line in open(f, 'r'): + out.write("{} {}".format(match.group(1), line)) def parse_data(): - frame = pandas.read_csv('timings.csv', header=None, names=('exec', 'kernel', 'what', 'value'), delimiter=' ') + frame = pandas.read_csv('timings.csv', header=None, names=('rank', 'exec', 'kernel', 'what', 'value'), delimiter=' ') time = frame[frame.what == "time"] ops = frame[frame.what != "time"] - # Here we should take 'min', but right now there are some zeroes written - timedata = time.groupby(('exec', 'kernel'))['value'].min() - opsdata = ops.groupby(('exec', 'kernel'))['value'].max() + timedata = time.groupby(('rank', 'exec', 'kernel'))['value'].min().to_frame().reset_index().groupby(('exec', 'kernel'))['value'].max() + opsdata = ops.groupby(('rank', 'exec', 'kernel'))['value'].max().to_frame().reset_index().groupby(('exec', 'kernel'))['value'].max() return timedata, opsdata def calculate_floprate(): + join_csv_files() time, ops = parse_data() - for key in time.keys(): - exe, kernel = key - if "nonopcount" in exe and kernel != "total": - opexe = exe.replace("nonopcount", "opcount") - print("exe={}".format(exe)) - print("opexe={}".format(opexe)) - print("kernel={}".format(kernel)) - print("FLOPS={}\n".format(ops[opexe][kernel] / time[exe][kernel])) + with open('floprates.csv', 'w') as out: + for key in time.keys(): + exe, kernel = key + if "nonopcount" in exe and kernel != "total": + opexe = exe.replace("nonopcount", "opcount") + out.write(" ".join([exe, kernel, str((ops[opexe][kernel] / time[exe][kernel]) / 1e9)]) + "\n") if __name__ == '__main__':