from time import time from gbso.cpu.state import CPUState from gbso.program.test_case import TestCase from gbso.cpu.insn import * from gbso.cpu.regs import R8 from gbso.optimize import cost, optimize from gbso.program.program import Program prgm = Program( insns=[ INC_R(R8.A), INC_R(R8.A), INC_R(R8.A), INC_R(R8.A), ], ) outputs = [R8.A] test_cases = [TestCase()] max_size = 4 num_iters = 1_000_000 # 10_000_000 initial_cost = cost(prgm, test_cases, outputs, prgm) initial_cycles = prgm.perf() prgm.display() print(f"Cost: {initial_cost}") print(f"Cycles: {initial_cycles}") start_time = time() optimized_prgm = optimize( prgm, max_size=max_size, test_cases=test_cases, outputs=outputs, num_iters=num_iters, ) end_time = time() optimized_prgm.display() optimized_cost = cost(prgm, test_cases, outputs, optimized_prgm) optimized_cycles = optimized_prgm.perf() print(f"Cost: {optimized_cost}") print(f"Cycles: {optimized_cycles}") optimized_cost = cost(prgm, test_cases, outputs, optimized_prgm) optimized_cycles = optimized_prgm.perf() print(f"Cost: {optimized_cost}") print(f"Cycles: {optimized_cycles}") optimized_cost = cost(prgm, test_cases, outputs, optimized_prgm) optimized_cycles = optimized_prgm.perf() print(f"Cost: {optimized_cost}") print(f"Cycles: {optimized_cycles}") print(f"Took {round(end_time - start_time, 3)} seconds")