|
| TrivialAllocator (const PhvKit &kit, PhvInfo &phv, int pipe_id) |
|
bool | allocate (const std::list< PHV::SuperCluster * > &clusters, AllocatorMetrics &alloc_metrics) |
| run trivial PHV allocator to allocate all clusters and update phv_i.
|
|
bool | can_be_allocated (const Allocation &empty_alloc, const PHV::SuperCluster *sc, AllocatorMetrics &alloc_metrics, const int max_slicings=128) const |
|
PreSlicingResult | pre_slice (const Allocation &empty_alloc, SuperCluster *sc, AllocatorMetrics &alloc_metrics, const int n_max_slicing=128, bool baseline_mode=false) const |
|
const PartialAllocResult * | slice_and_allocate_sc (const Allocation &empty_alloc, const PHV::SuperCluster *sc, PhvStatus phv_status, const ContainerGroupsBySize &container_groups, AllocatorMetrics &alloc_metrics, bool homogeneous_sizes=false, bool minimal_packing_slicing=true, const int max_slicings=128, std::ostream *history=nullptr) const |
|
| AllocatorBase (const PhvKit &kit) |
|
PHV::Transaction | alloc_deparser_zero_cluster (const ScoreContext &ctx, const PHV::Allocation &alloc, const PHV::SuperCluster *sc, PhvInfo &phv) const |
|
AllocResult | alloc_strided_super_clusters (const ScoreContext &ctx, const Allocation &alloc, const SuperCluster *sc, const ContainerGroupsBySize &groups, AllocatorMetrics &alloc_metrics, const int max_n_slicings=64) const |
|
AllocResult | try_sliced_super_cluster (const ScoreContext &ctx, const Allocation &alloc, const SuperCluster *sc, const ContainerGroupsBySize &groups, AllocatorMetrics &alloc_metrics) const |
| ALLOCATION functions common to trivial and greedy allocation.
|
|
|
using | DfsAllocCb = std::function<bool(const Transaction &)> |
| internal type of callback.
|
|
AllocResult | alloc_stride (const ScoreContext &ctx, const Allocation &alloc, const std::vector< FieldSlice > &stride, const ContainerGroupsBySize &groups, AllocatorMetrics &alloc_metrics) const |
|
const AllocError * | check_container_scope_constraints (const Allocation &alloc, const std::vector< AllocSlice > &candidates, const Container &c) const |
|
std::set< PHV::Size > | compute_valid_container_sizes (const SuperCluster *sc) const |
|
const AllocError * | is_container_bytes_ok (const Allocation &alloc, const std::vector< AllocSlice > &candidates, const Container &c) const |
|
const AllocError * | is_container_gress_ok (const Allocation &alloc, const AllocSlice &sl, const Container &c) const |
|
const AllocError * | is_container_solitary_ok (const Allocation &alloc, const AllocSlice &candidate, const Container &c) const |
|
const AllocError * | is_container_type_ok (const AllocSlice &sl, const Container &c) const |
| CONSTRAINT CHECKING Functions common to trivial and greedy allocation.
|
|
const AllocError * | is_container_write_mode_ok (const Allocation &alloc, const AllocSlice &sl, const Container &c) const |
|
std::vector< const SuperCluster::SliceList * > * | make_alloc_order (const ScoreContext &ctx, const SuperCluster *sc, const PHV::Size width) const |
|
Transaction | make_speculated_alloc (const ScoreContext &ctx, const Allocation &alloc, const SuperCluster *sc, const std::vector< AllocSlice > &candidates, const Container &candidates_cont) const |
|
std::vector< int > | make_start_positions (const ScoreContext &ctx, const SuperCluster::SliceList *sl, const PHV::Size width) const |
|
std::optional< Transaction > | try_hints (const ScoreContext &ctx, const Allocation &alloc, const ContainerGroup &group, const ActionSourceCoPackMap &action_hints_map, ordered_set< PHV::FieldSlice > &allocated, ScAllocAlignment &hint_enforced_alignments, AllocatorMetrics &alloc_metrics) const |
|
SomeContScopeAllocResult | try_slices_adapter (const ScoreContext &ctx, const Allocation &alloc, const FieldSliceAllocStartMap &fs_starts, const ContainerGroup &group, std::optional< Container > c, AllocatorMetrics &alloc_metrics) const |
|
ContScopeAllocResult | try_slices_to_container (const ScoreContext &ctx, const Allocation &alloc, const FieldSliceAllocStartMap &fs_starts, const Container &c, AllocatorMetrics &alloc_metrics, const bool skip_mau_checks=false) const |
|
SomeContScopeAllocResult | try_slices_to_container_group (const ScoreContext &ctx, const Allocation &alloc, const FieldSliceAllocStartMap &fs_starts, const ContainerGroup &group, AllocatorMetrics &alloc_metrics) const |
|
AllocResult | try_super_cluster_to_container_group (const ScoreContext &ctx, const Allocation &alloc, const SuperCluster *sc, const ContainerGroup &group, AllocatorMetrics &alloc_metrics) const |
|
AllocResult | try_wide_arith_slices_to_container_group (const ScoreContext &ctx, const Allocation &alloc, const ScAllocAlignment &alignment, const SuperCluster::SliceList *lo, const SuperCluster::SliceList *hi, const ContainerGroup &group, AllocatorMetrics &alloc_metrics) const |
|
const AllocError * | verify_can_pack (const ScoreContext &ctx, const Allocation &alloc, const SuperCluster *sc, const std::vector< AllocSlice > &candidates, const Container &c, ActionSourceCoPackMap &co_pack_hints) const |
|
const PhvKit & | kit_i |
|
TrivialAllocator allocates PHV fields to an infinite long PHV. It is in two cases: (1) trivial allocation before table placement. (2) check whether all constraints can be satisfied.