CANParser: perf benchmark on route script (#29324)
	
		
	
				
					
				
			* timing test
* test
* fix
* print
* loop
* clean up
* wider range
* Update selfdrive/car/tests/test_models.py
* Apply suggestions from code review
* run many times
* Update selfdrive/car/tests/test_models.py
* run for many its
* run with unittest and print as list
* Update .github/workflows/selfdrive_tests.yaml
* Update .github/workflows/selfdrive_tests.yaml
* total time is super inconsistent (body)
* Update selfdrive/car/tests/test_models.py
* clean up
* clean up
* clean up
* this works!
* draft
* test suite not as modular
* try something like this
* can do kb, but not too representative
* clean up
* remove kb? it depends on signals
* clean up
* more clean up
* rename
* just measure all CANParsers
* can do all this manually
* but this is way simpler
* comment
* fix mypy
* this is correct too
* 3 seconds instead of 1.5
old-commit-hash: e2910d0720
			
			
				beeps
			
			
		
							parent
							
								
									6c6fcd8b22
								
							
						
					
					
						commit
						7e716dbc87
					
				
				 2 changed files with 40 additions and 0 deletions
			
			
		| @ -0,0 +1,37 @@ | |||||||
|  | #!/usr/bin/env python3 | ||||||
|  | import numpy as np | ||||||
|  | import time | ||||||
|  | from tqdm import tqdm | ||||||
|  | 
 | ||||||
|  | from cereal import car | ||||||
|  | from selfdrive.car.tests.routes import CarTestRoute | ||||||
|  | from selfdrive.car.tests.test_models import TestCarModelBase | ||||||
|  | from tools.plotjuggler.juggle import DEMO_ROUTE | ||||||
|  | 
 | ||||||
|  | N_RUNS = 10 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class CarModelTestCase(TestCarModelBase): | ||||||
|  |   test_route = CarTestRoute(DEMO_ROUTE, None) | ||||||
|  |   ci = False | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |   # Get CAN messages and parsers | ||||||
|  |   tm = CarModelTestCase() | ||||||
|  |   tm.setUpClass() | ||||||
|  |   tm.setUp() | ||||||
|  | 
 | ||||||
|  |   CC = car.CarControl.new_message() | ||||||
|  |   ets = [] | ||||||
|  |   for _ in tqdm(range(N_RUNS)): | ||||||
|  |     start_t = time.process_time_ns() | ||||||
|  |     for msg in tm.can_msgs: | ||||||
|  |       for cp in tm.CI.can_parsers: | ||||||
|  |         if cp is not None: | ||||||
|  |           cp.update_strings((msg.as_builder().to_bytes(),)) | ||||||
|  |     ets.append((time.process_time_ns() - start_t) * 1e-6) | ||||||
|  | 
 | ||||||
|  |   print(f'{len(tm.can_msgs)} CAN packets, {N_RUNS} runs') | ||||||
|  |   print(f'{np.mean(ets):.2f} mean ms, {max(ets):.2f} max ms, {min(ets):.2f} min ms, {np.std(ets):.2f} std ms') | ||||||
|  |   print(f'{np.mean(ets) / len(tm.can_msgs):.4f} mean ms / CAN packet') | ||||||
					Loading…
					
					
				
		Reference in new issue