CLBlast/scripts/benchmark/utils.py

67 lines
1.7 KiB
Python

# This file is part of the CLBlast project. The project is licensed under Apache Version 2.0. This file follows the
# PEP8 Python style guide and uses a max-width of 120 characters per line.
#
# Author(s):
# Cedric Nugteren <www.cedricnugteren.nl>
import csv
import subprocess
def k(value):
return value * 1024
def m(value):
return value * 1024 * 1024
def float_to_kilo_mega(value):
if value % 1024 or value <= 1024:
return "%.0f" % value
elif value % (1024 * 1024) or value <= (1024 * 1024):
return "%.0fK" % (value / 1024.0)
else:
return "%.0fM" % (value / (1024.0 * 1024.0))
def powers_of_2(start, stop):
while start <= stop:
yield start
start *= 2
def precision_to_letter(precision):
if precision == 16:
return "H"
elif precision == 32:
return "S"
elif precision == 64:
return "D"
elif precision == 3232:
return "C"
elif precision == 6464:
return "Z"
else:
return "X"
def run_binary(command, arguments):
full_command = command + " " + " ".join(arguments)
print("[benchmark] Calling binary: %s" % str(full_command))
try:
return subprocess.Popen(full_command, shell=True, stdout=subprocess.PIPE).stdout.read()
except OSError as e:
print("[benchmark] Error while running the binary, got exception: %s" + str(e))
return False
def parse_results(csv_data):
csv_data = csv_data.split("\n")
results = csv.DictReader(csv_data, delimiter=";", skipinitialspace=True)
results = [r for r in results]
for result in results:
for key in result:
result[key] = float(result[key]) if "." in result[key] else int(result[key])
return results