Benchmarks/AMD/TransferBench.py (53 lines of code) (raw):
import json
import os
import time
import subprocess
from Infra import tools
class TransferBench:
def __init__(self, config_path: str, dir_path: str, machine: str):
self.name = "TransferBench"
self.machine_name = machine
config = self.get_config(config_path)
self.num_runs, self.interval = self.config_conversion(config)
self.dir_path = dir_path
self.container = None
self.buffer = []
def get_config(self, path: str):
file = open(path)
data = json.load(file)
file.close()
try:
return data[self.name]
except KeyError:
raise KeyError("no value found")
def parse_json(self, config):
return config["inputs"]["num_runs"], config["inputs"]["interval"]
def config_conversion(self, config) -> tuple[list, list, list]:
return self.parse_json(config)
def build(self):
path = "TransferBench"
isdir = os.path.isdir(path)
if not isdir:
print("Building TransferBench...")
clone_cmd = "git clone https://github.com/ROCm/TransferBench.git " + self.dir_path + "/TransferBench"
results = subprocess.run(clone_cmd, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
tools.write_log(tools.check_error(results))
results = subprocess.run("mkdir " + self.dir_path + "/TransferBench/build && cd" + self.dir_path + "/TransferBench/build", shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
tools.write_log(tools.check_error(results))
results = subprocess.run("cd " + self.dir_path + "/TransferBench/build && CXX=/opt/rocm/bin/hipcc cmake .. && make", shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
tools.write_log(tools.check_error(results))
def run(self):
print("Running TransferBench...")
runs_executed = 0
while runs_executed < self.num_runs:
run_cmd = "sudo " + self.dir_path + "/TransferBench/build/TransferBench " + self.dir_path + "/Benchmarks/AMD/transferbench.cfg | grep -v '='"
results = subprocess.run(run_cmd, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
tools.write_log(tools.check_error(results))
log = results.stdout.decode("utf-8")
print(log)
self.save(log, 'Outputs/TransferBench_' + self.machine_name + '.txt')
runs_executed += 1
time.sleep(int(self.interval))
def save(self, data, filename):
with open(filename, mode='w', encoding='utf-8') as file:
file.write(data)