| 324 | |
| 325 | |
| 326 | def profile_table( |
| 327 | profile_data: Dict[str, List[ProfileEvent]], model_buffer=None |
| 328 | ) -> List[PrettyTable]: |
| 329 | |
| 330 | results = [] |
| 331 | max_len = 0 |
| 332 | |
| 333 | for name, prof_entries_list in profile_data.items(): |
| 334 | table = PrettyTable() |
| 335 | table.title = name |
| 336 | table.add_rows( |
| 337 | [ |
| 338 | ( |
| 339 | entry.name, |
| 340 | entry.chain_idx, |
| 341 | entry.instruction_idx, |
| 342 | None, |
| 343 | ) |
| 344 | + tuple(val for val in entry.duration) |
| 345 | for entry in prof_entries_list |
| 346 | ] |
| 347 | ) |
| 348 | max_len = max(max_len, len(prof_entries_list[0].duration)) |
| 349 | table.field_names = [ |
| 350 | "Name", |
| 351 | "Chain", |
| 352 | "Instr", |
| 353 | "Frame", |
| 354 | ] + ["Iteration " + str(i) for i in range(max_len)] |
| 355 | results.append(table) |
| 356 | return results |
| 357 | |
| 358 | |
| 359 | def mem_profile_table(mem_allocations: Dict[str, List[MemEvent]]) -> List[PrettyTable]: |