benchmark.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from subprocess import call, check_output
  2. import time
  3. def run_real(samples):
  4. with open("model/results_real", 'w') as f:
  5. for _ in range(samples):
  6. start = time.time()
  7. call(["pypy", "-m", "pytest", "integration/test_powerwindow.py", "-k", "fast", "-x"])
  8. print("Time to execute: " + str(time.time() - start))
  9. f.write(str(time.time() - start))
  10. f.write("\n")
  11. f.flush()
  12. def run_simulation(latency):
  13. import sys
  14. sys.path.append("model")
  15. from model import simulate
  16. print("SIMULATE for " + str(latency))
  17. params = ["pypy", "model/model.py"]
  18. for k, v in latency.items():
  19. params.extend([k, str(v)])
  20. output = check_output(params)
  21. lines = output.split("\n")
  22. for l in lines:
  23. if l.startswith("Execution time "):
  24. exec_time = float(l.split("Execution time ", 1)[1].strip())
  25. elif l.startswith("Simulation time "):
  26. sim_time = float(l.split("Simulation time ", 1)[1].strip())
  27. result = (exec_time, sim_time)
  28. print(result)
  29. return result
  30. def benchmark(parallel, to_run):
  31. if parallel:
  32. from multiprocessing import Pool
  33. pool = Pool(processes=4)
  34. results = pool.map(run_simulation, to_run)
  35. else:
  36. results = map(run_simulation, to_run)
  37. return results
  38. def benchmark_mvs(parallel, latency_range):
  39. to_run = [{"mvk2mvs_latency": i, "mvs2mvk_latency": i} for i in latency_range]
  40. results = benchmark(parallel, to_run)
  41. print(results)
  42. with open("model/results_mvs_latency", 'w') as f:
  43. for latency, result in zip(to_run, results):
  44. sim, exe = result
  45. f.write("%s %s %s\n" % (latency*1000, sim, exe))
  46. f.flush()
  47. def benchmark_mvi(parallel, latency_range):
  48. to_run = [{"mvi2mvk_latency": i, "mvk2mvi_latency": i} for i in latency_range]
  49. results = benchmark(parallel, to_run)
  50. print(results)
  51. with open("model/results_mvi_latency", 'w') as f:
  52. for latency, result in zip(to_run, results):
  53. sim, exe = result
  54. f.write("%s %s %s\n" % (latency*1000, sim, exe))
  55. f.flush()
  56. if __name__ == "__main__":
  57. benchmark_mvs(parallel = False, latency_range=[0.0, 0.5])
  58. benchmark_mvi(parallel = False, latency_range=[0.0, 0.5])
  59. run_real(samples = 2)
  60. #benchmark_mvs(parallel = False, latency_range=[0.0, 0.0017, 0.012, 0.02, 0.1, 0.5])
  61. #benchmark_mvi(parallel = False, latency_range=[0.0, 0.0017, 0.012, 0.02, 0.1, 0.5])
  62. #run_real(samples = 10)