gameboy superoptimizer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.2 KiB

2 years ago
2 years ago
  1. from gbso.program.mutate import create_random_program
  2. from time import time
  3. from gbso.cpu.state import CPUState
  4. from gbso.program.test_case import TestCase
  5. from gbso.cpu.insn import *
  6. from gbso.cpu.regs import R8
  7. from gbso.optimize import cost, optimize
  8. from gbso.program.program import Program
  9. prgm = Program(
  10. insns=[
  11. INC_R(R8.A),
  12. INC_R(R8.A),
  13. INC_R(R8.A),
  14. INC_R(R8.A),
  15. ],
  16. )
  17. outputs = [R8.A]
  18. test_cases = [TestCase()]
  19. max_size = 4
  20. num_iters = 1_000_000
  21. initial_cost = cost(prgm, test_cases, outputs, prgm)
  22. initial_cycles = prgm.perf()
  23. print("Program to optimize:")
  24. prgm.display()
  25. print(f"Cost: {initial_cost[0]}")
  26. print(f"Cycles: {initial_cycles}")
  27. start_time = time()
  28. optimized_prgm = optimize(
  29. prgm,
  30. init_prgm=create_random_program(max_size),
  31. max_size=max_size,
  32. test_cases=test_cases,
  33. outputs=outputs,
  34. num_iters=num_iters,
  35. )
  36. end_time = time()
  37. print("Optimized result:")
  38. optimized_prgm.display()
  39. optimized_cost = cost(prgm, test_cases, outputs, optimized_prgm)
  40. optimized_cycles = optimized_prgm.perf()
  41. print(f"Cost: {optimized_cost[0]}")
  42. print(f"Cycles: {optimized_cycles}")
  43. print(f"Took {round(end_time - start_time, 3)} seconds")