verilog-to-routing/vtr-verilog-to-routing

[Pack] List of Feasible Candidates Should be a Priority Queue

AlexandreSinger opened this issue · 1 comments

In the GreedyCandidateSelector class, used within the packer, a list of feasible blocks is maintained which is used to select the next candidate to propose:

/// @brief Array of feasible blocks to select from [0..max_array_size-1]
///
/// Sorted in ascending gain order so that the last cluster_ctx.blocks is
/// the most desirable (this makes it easy to pop blocks off the list.
std::vector<t_pack_molecule*> feasible_blocks;
int num_feasible_blocks;

Currently this is stored as a vector where it is ordered based on the gain of the block. To maintain the order, an insertion sort is used every time a block is added to the list. Not only is this code confusing to read, it may also be slow. This should instead be an std::priority_queue.

I ll take this.