Skip to content
Snippets Groups Projects
benchmark.py 2.23 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env python3
    
    import numpy as np
    import re
    import subprocess
    import sys
    
    
    
    def main(make_args):
        make_args += ["app=deflatetest"]
    
        base_rom = None
        base_ram = None
        defl_rom = None
        defl_ram = None
        defl_ms = None
        defl_size = None
    
        status = subprocess.run(
            ["./mp"] + make_args + ["deflate_nop=1"],
            stdout=subprocess.PIPE,
    
            stderr=subprocess.PIPE,
    
            universal_newlines=True,
        )
    
        for line in status.stdout.split("\n"):
            match = re.search(r"ROM: (\d+) .* RAM: (\d+)", line)
            if match:
                base_rom = int(match.group(1))
                base_ram = int(match.group(2))
    
            match = re.match(r"Program: *(\d+) bytes", line)
            if match:
                base_rom = int(match.group(1))
            match = re.match(r"Data: *(\d+) bytes", line)
            if match:
                base_ram = int(match.group(1))
    
    
        status = subprocess.run(
    
            ["./mp"] + make_args,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            universal_newlines=True,
    
        )
    
        for line in status.stdout.split("\n"):
            match = re.search(r"ROM: (\d+) .* RAM: (\d+)", line)
            if match:
                defl_rom = int(match.group(1))
                defl_ram = int(match.group(2))
    
            match = re.match(r"Program: *(\d+) bytes", line)
            if match:
                defl_rom = int(match.group(1))
            match = re.match(r"Data: *(\d+) bytes", line)
            if match:
                defl_ram = int(match.group(1))
    
    
        rom_usage = int(np.ceil((defl_rom - base_rom) / 16)) * 16
        ram_usage = int(np.ceil((defl_ram - base_ram) / 16)) * 16
    
        arch_line = " ".join(make_args)
        print(f"| {arch_line} | {rom_usage} B | {ram_usage} B")
    
    
        status = subprocess.run(
            ["make", "cat"] + make_args, stdout=subprocess.PIPE, universal_newlines=True
        )
    
        for line in status.stdout.split("\n"):
            match = re.match(r"took ([0-9.]+) ms", line)
            if match:
                defl_ms = float(match.group(1))
            match = re.match(r"inflate returned (\d+)", line)
            if match:
                defl_size = int(match.group(1))
    
        defl_speed = defl_size / defl_ms
        print(f"{defl_speed:3.0f} kB/s    ({defl_size:4d} B @ {defl_ms:6.2f} ms)")
    
    
    if __name__ == "__main__":
    
        main(sys.argv[1:])