Struct IncrementalDmax

Struct Documentation

struct IncrementalDmax

基于链路占用量的增量最大延迟评估器。

缓存每条无向边上的线网数量、TDM 比例和边延迟,并建立边到线网的反向索引, 从而在 rip-up/reroute 后只重算受影响线网的最差源汇延迟。

Public Functions

inline IncrementalDmax(int F_, const std::vector<std::vector<int>> &cap_, double alpha_, double beta_, double die_delay_)

创建空的增量延迟缓存。

Parameters:
  • F_ – 路由拓扑节点数。

  • cap_ – 物理链路容量矩阵,生命周期必须覆盖本对象。

  • alpha_ – TDM 延迟系数。

  • beta_ – 跨 FPGA 固定延迟。

  • die_delay_ – 片内跨 Die 固定延迟。

inline void build_from(const flat_hash_map<int, std::set<std::pair<int, int>>> &route_trees, const std::vector<cut_net> &cut_nets)

根据当前路由树完整初始化占用、延迟、反向索引和线网延迟缓存。

Parameters:
  • route_trees – 原始线网编号到路由树边集的映射。

  • cut_nets – 局部割线网列表。

inline void apply_edge_delta(int u, int v, int delta)

更新一个有向存储位置的线网计数,并重算对应边的 TDM 与延迟。

Parameters:
  • u – 边的起点;调用方需按缓存使用的方向传入。

  • v – 边的终点。

  • delta – 线网计数变化量,通常为 +1 或 -1。

inline void apply_edge_delta_nodirection(int u, int v, int delta)

更新一条无向边的线网计数,并对称更新两个方向的 TDM 与延迟。

Parameters:
  • u – 边的任一端点。

  • v – 边的另一端点。

  • delta – 线网计数变化量,通常为 +1 或 -1。

inline void recompute_nets(const std::vector<int> &nets, const flat_hash_map<int, std::set<std::pair<int, int>>> &route_trees, const std::vector<cut_net> &cut_nets)

仅重新计算指定局部线网的最差源汇延迟。

Parameters:
  • nets – 需要更新的局部 cut_net 编号。

  • route_trees – 原始线网编号到当前路由树的映射。

  • cut_nets – 局部割线网列表。

inline std::pair<double, int> global_worst(const std::vector<cut_net> &cut_nets) const

查询当前所有割线网中的最大延迟。

Parameters:

cut_nets – 局部割线网列表,用于将局部编号转换为原始线网编号。

Returns:

{最大延迟, 原始线网编号};无有效线网时编号为 -1。

inline void index_edge_for_net(int u, int v, int lid, bool add)

在线网增加或删除无向边后更新边到线网的反向索引。

Parameters:
  • u – 边的任一端点。

  • v – 边的另一端点。

  • lid – 局部 cut_net 编号。

  • add – true 表示增加索引,false 表示删除索引。

inline std::pair<double, int> global_worst_lid() const

查询当前所有割线网中的最大延迟及其局部编号。

Returns:

{最大延迟, 局部 cut_net 编号};无有效线网时编号为 -1。

Public Members

int F

路由拓扑中的节点总数。

const std::vector<std::vector<int>> &cap

物理链路容量矩阵。

double alpha

TDM 比例对应的线性延迟系数。

double beta

使用跨 FPGA 边时的固定割边延迟。

std::vector<std::vector<int>> net_cnt

每条无向边上的当前线网数量。

std::vector<std::vector<double>> delay

每条边的当前延迟,即 beta + alpha * TDM 比例。

std::vector<std::vector<double>> tdm

每条边的当前 TDM 比例。

std::vector<double> net_delay

按局部 cut_net 编号保存的最差源汇延迟。

double die_delay = 0.0

片内跨 Die 边的固定延迟。

std::unordered_map<long long, std::vector<int>> edge_to_nets

无向边到使用它的局部线网编号列表。

Public Static Functions

static inline long long k(int u, int v)

生成无向边的紧凑整数键。