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.

66 lines
1.4 KiB

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