24def run(directory, threads):
25 environment = dict(os.environ, OMP_NUM_THREADS=str(threads))
26 log = os.path.join(directory, f
"run-{threads}.log")
27 with open(log,
"w")
as output:
28 subprocess.run([
"./single-black-hole"], cwd=directory, env=environment, stdout=output, stderr=subprocess.STDOUT)
29 text = open(log).read()
30 statistics = re.findall(
r"dumpStatistics\(\)\s+info\s+(\d+) tree\(s\): (.*) total=(\d+)/(\d+)", text)
31 trees, per_tree, local, virtual = statistics[-1]
32 local_per_tree = [
int(x)
for x
in re.findall(
r"#\d+:(\d+)/", per_tree)]
33 step = re.search(
r"TimeStep: ([0-9.e+-]+)s\s+\(avg=([0-9.e+-]+),#measurements=(\d+)", text)
35 trees=
int(trees), local=
int(local), virtual=
int(virtual), max_local=max(local_per_tree),
36 total=float(step.group(1)) *
int(step.group(3)), average=float(step.group(2)),