verilator/include
Geza Lore 9ac64d0b92 Improve performance of MTask coarsening
Various optimizations to speed up MTasks coarsening (which is the long
pole in the multi-threaded scheduling of very large designs).

The biggest impact ones:
- Use efficient hand written Pairing Heaps for implementing priority
  queues and the scoreboard, instead of the old SortByValueMap. This
  helps us avoid having to sort a lot of merge candidates that we will
  never actually consider and helps a lot in performance.
- Remove unnecessary associative containers and store data structures
  (the heap nodes in particular) directly in the object they relate to.
  This eliminates a huge amount of lookups and helps a lot in
  performance.
- Distribute storage for SiblingMC instances into the LogicMTask
  instances, and combine with the sibling maps. This again eliminates
  hash table lookups and makes storage structures smaller.
- Remove some now bidirectional edge maps, keep only the forward map.

There are also some other smaller optimizations:
- Replaced more unnecessary dynamic_casts with static_casts
- Templated some functions/classes to reduce the number of static
  branches in loops.
- Improves sorting of edges for sibling candidate creation
- Various micro-optimizations here and there

This speeds up MTask coarsening by 3.8x on a large design, which
translates to a 2.5x speedup of the ordering pass in multi-threaded
mode. (Combined with the earlier optimizations, ordering is now 3x
faster.)

Due to the elimination of a lot of the auxiliary data structures, and
ensuring a minimal size for the necessary ones, memory consumption of
the MTask coarsening is also reduced (measured up to 4.4x reduction
though the accuracy of this is low).

The algorithm is identical except for minor alterations of the order
some candidates are added or removed, this can cause perturbation in the
output due to tied scores being broken based on IDs.
2022-08-20 21:18:50 +01:00
..
gtkwave GTKWave header updates from upstream. 2022-02-09 21:56:22 -05:00
vltstd
.gitignore
verilated_config.h.in Add VERILATOR_VERSION_INTEGER for determining API (#3343). 2022-03-12 11:17:39 -05:00
verilated_cov_key.h
verilated_cov.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_cov.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_dpi.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_dpi.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_fst_c.cpp Internals: Fix some clang-tidy issues. No functional change intended. 2022-07-30 11:54:28 -04:00
verilated_fst_c.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_fst_sc.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_fst_sc.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_funcs.h Remove deprecated and unused timescale override defines 2022-07-20 14:06:09 +01:00
verilated_heavy.h
verilated_imp.h Internals: Fix some clang-tidy issues. No functional change intended. 2022-07-30 11:54:28 -04:00
verilated_intrinsics.h
verilated_profiler.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_profiler.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_save.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_save.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_sc.h Deprecate 'vluint64_t' and similar types (#3255). 2022-03-27 15:27:40 -04:00
verilated_sym_props.h Internals: Fix some clang-tidy issues. No functional change intended. 2022-07-30 11:54:28 -04:00
verilated_syms.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_threads.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_threads.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_trace_defs.h
verilated_trace_imp.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_trace.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_types.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_vcd_c.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_vcd_c.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_vcd_sc.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_vcd_sc.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_vpi.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated_vpi.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated.cpp Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated.h Update clang-format config and apply 2022-08-05 12:00:24 +01:00
verilated.mk.in Internals: Spacing from develop-v5. No functional change. 2022-07-30 11:54:28 -04:00
verilated.v
verilatedos.h Improve performance of MTask coarsening 2022-08-20 21:18:50 +01:00