IQ.Pilot Release Commit @ bec7652
This commit is contained in:
54
iqpilot/selfdrive/iqmodeld/tests/timing/benchmark.py
Executable file
54
iqpilot/selfdrive/iqmodeld/tests/timing/benchmark.py
Executable file
@@ -0,0 +1,54 @@
|
||||
"""
|
||||
Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos/
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import time
|
||||
|
||||
import numpy as np
|
||||
|
||||
import iqpilot.cereal.messaging as messaging
|
||||
from iqpilot.system.manager.process_config import managed_processes
|
||||
|
||||
RUN_COUNT = int(os.getenv("N", "5"))
|
||||
WINDOW_SECONDS = int(os.getenv("TIME", "30"))
|
||||
WARMUP_MESSAGES = 10
|
||||
|
||||
|
||||
def _collect_execution_samples(sock, duration_s: int) -> np.ndarray:
|
||||
samples: list[float] = []
|
||||
deadline = time.monotonic() + duration_s
|
||||
while time.monotonic() < deadline:
|
||||
for message in messaging.drain_sock(sock, wait_for_one=True):
|
||||
samples.append(message.modelV2.modelExecutionTime)
|
||||
return np.array(samples[WARMUP_MESSAGES:]) * 1000.0
|
||||
|
||||
|
||||
def _single_benchmark_pass(sock) -> np.ndarray:
|
||||
os.environ["LOGPRINT"] = "debug"
|
||||
managed_processes["modeld"].start()
|
||||
time.sleep(5)
|
||||
try:
|
||||
return _collect_execution_samples(sock, WINDOW_SECONDS)
|
||||
finally:
|
||||
managed_processes["modeld"].stop()
|
||||
|
||||
|
||||
def _report_run(index: int, values_ms: np.ndarray) -> None:
|
||||
print(
|
||||
f"run {index}: avg={values_ms.mean():0.2f}ms "
|
||||
f"min={values_ms.min():0.2f}ms max={values_ms.max():0.2f}ms"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
subscriber = messaging.sub_sock("modelV2", conflate=False, timeout=1000)
|
||||
all_runs = [_single_benchmark_pass(subscriber) for _ in range(RUN_COUNT)]
|
||||
|
||||
print("\n")
|
||||
print(f"ran modeld {RUN_COUNT} times for {WINDOW_SECONDS}s each")
|
||||
for index, values_ms in enumerate(all_runs, start=1):
|
||||
_report_run(index, values_ms)
|
||||
print("\n")
|
||||
Reference in New Issue
Block a user