尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

数学建模在芯片布局优化中的应用:从PISA架构问题到组合优化求解

数学建模在芯片布局优化中的应用:从PISA架构问题到组合优化求解 1. 赛题核心与破题思路总览2022年华为杯中国研究生数学建模竞赛的D题题目是“PISA架构芯片资源排布问题”。看到这个题目很多同学第一反应可能是懵的尤其是非微电子或集成电路背景的选手。这很正常因为这道题将数学建模的触角直接伸向了芯片设计这个硬核工业领域。但别慌这道题的精妙之处在于它本质上是一个带复杂约束的组合优化与调度问题核心考察的是我们如何用数学工具去描述和解决一个实际的工程难题而不是要求我们成为芯片设计专家。我当年带队做这道题时最大的体会就是剥离专业术语的外衣抓住问题抽象的骨架。PISA架构是什么你可以把它理解为一套芯片设计的“乐高”标准。芯片上不是有各种功能模块比如计算核心、内存控制器、输入输出接口嘛这些模块在硅片上怎么摆放、怎么用金属线连起来是有严格规矩的。PISA架构就规定了这些规矩比如某些模块必须放在特定区域模块之间的连线不能太长、不能交叉得太乱否则芯片性能不达标甚至根本做不出来。题目给我们的任务就是在这样一个布满“条条框框”的棋盘芯片布局区域上把一堆形状、功能各异的“积木”电路模块最优地摆下去并且用“导线”互连线连好目标是让总连线长度尽可能短并且满足所有物理和性能约束。所以破题的关键思路可以分解为三步第一步是数学建模即如何用数学语言变量、约束、目标函数把“摆积木”和“连导线”这个事说清楚第二步是算法设计即面对这样一个NP-Hard的组合爆炸问题我们用什么策略精确算法、启发式算法、元启发式算法去搜索那个相对最优的摆放方案第三步是模型实现与调优即如何编程实现我们的算法并利用数据特点进行加速和优化。整个解题过程就是一个将具体工程问题抽象为数学模型再通过算法求解并反馈指导工程实践的标准流程这也是数学建模竞赛的精髓所在。2. 问题一基础模型构建与线性规划尝试问题一通常是整个赛题的基石要求我们在相对简化的场景下建立模型。对于D题问题一很可能给出了芯片区域、模块集合、部分约束如某些模块的固定位置、连线关系网络要求我们建立一个以最小化总线长为首要目标的布局模型。2.1 决策变量与目标函数定义这是建模的第一步也是最考验功底的一步。我们需要用数学变量来描述每个模块的位置。核心决策变量最直接的方式是为每个模块i定义其左下角或中心的坐标 (x_i, y_i)。如果模块有旋转可能还需要增加一个方向变量 θ_i如0° 90° 180° 270°。目标函数最小化总线长。总线长如何计算在芯片设计中通常使用半周长线长HPWL, Half-Perimeter Wire Length来近似估计互连线的长度。对于连接了多个模块的一条“网”net其HPWL等于包围该网所有模块接点的最小矩形的半周长。例如一条线连接了三个模块A、B、C我们找到这三个模块对应接点坐标在X方向的最大最小值x_max, x_min在Y方向的最大最小值y_max, y_min那么这条线的HPWL (x_max - x_min) (y_max - y_min)。总目标函数就是所有线的HPWL之和最小化。注意直接使用HPWL作为目标函数在数学上是一个“最小最大值”问题本身是非线性的不利于直接求解。一个关键的技巧是线性化。我们可以为每条线网n引入四个辅助变量Lx_n, Rx_n, By_n, Ty_n分别代表该线网在布局中所有接点X坐标的最小值、最大值Y坐标的最小值、最大值。并添加约束对于线网n中的每一个模块接点坐标 (x_i dx, y_i dy)dx, dy是接点在模块内的相对偏移都有 Lx_n ≤ x_idx ≤ Rx_n, By_n ≤ y_idy ≤ Ty_n。这样线网n的线长就可以近似表示为 (Rx_n - Lx_n) (Ty_n - By_n)而目标函数就变成了这些辅助变量的线性函数之和的最小化。这是将问题转化为混合整数线性规划MILP的关键一步。2.2 约束条件的形式化约束是芯片布局的灵魂也是本题最大的难点所在。我们需要把PISA架构的那些“规矩”一条条翻译成数学不等式或等式。边界约束每个模块必须完全放置在给定的芯片矩形区域内。设模块i的宽度为w_i高度为h_i芯片区域为[0, W] x [0, H]。那么约束为0 ≤ x_i ≤ W - w_i 0 ≤ y_i ≤ H - h_i。非重叠约束任意两个模块i和j在平面上不能有重叠。这是一个经典的“或”约束要么i在j的左边要么i在j的右边要么i在j的下边要么i在j的上边。这需要引入二元辅助变量来实现线性化。例如引入变量b_left_ij为1表示i在j左边并添加约束x_i w_i ≤ x_j M * (1 - b_left_ij)其中M是一个足够大的常数。同时确保对于每一对(i, j)四个方向变量左、右、下、上之和至少为1。这是布局问题建模中最核心、也最“吃”计算资源的部分。性能约束时序约束某些关键路径上的信号传输延迟不能超过一个阈值。延迟与连线长度成正比更精确地说与绕线后的寄生电阻电容有关但赛题中常用线长近似。因此这可以转化为对特定线网HPWL的上限约束HPWL_n ≤ T_n。预放置约束题目可能指定某些模块如输入输出接口必须固定在芯片边界特定位置。这直接转化为对x_i, y_i的等式约束。簇约束某些功能相关的模块需要放置得比较近形成一个“簇”。这可以转化为对这些模块两两之间曼哈顿距离之和的一个上限约束。2.3 模型求解策略精确解与启发式的权衡当我们把目标函数和所有约束尤其是非重叠约束线性化后都写成线性形式我们就得到了一个大规模的混合整数线性规划MILP模型。理论上我们可以用CPLEX、Gurobi等商业求解器直接求解。但这里有一个巨大的陷阱规模可扩展性问题。精确求解的局限性即使对于几十个模块的小规模算例引入的非重叠约束所需的二元变量数量也会爆炸O(n²)。求解器可能在规定时间内竞赛通常为3-4天连一个可行解都找不到更别说最优解了。因此直接将完整的MILP模型丢给求解器对于问题一可能勉强尝试但对于后续更大规模的问题此路基本不通。我们的策略在问题一中如果数据规模较小比如模块数20可以尝试建立完整的MILP模型并用求解器求精确解或优质可行解这能体现建模的完整性。但更重要的是必须同时设计启发式方法作为备份和后续问题的基础。一个经典的启发性思路是模拟退火Simulated Annealing, SA。我们将芯片布局看作一个状态通过移动、交换两个模块的位置来产生邻域状态。目标函数就是总线长HPWL约束处理则通过惩罚函数法将非重叠约束、边界约束等转化为惩罚项加入目标函数。例如如果两个模块重叠就在总成本中加上一个很大的惩罚值。这样我们就把一个有约束优化问题转化为了一个无约束优化问题用模拟退火进行搜索。虽然可能得不到理论最优但在有限时间内能得到非常不错的可行解。实操心得在竞赛中我们采用了“双线并行”策略。一部分队员负责用Python的PuLP或Pyomo库搭建MILP模型并提交到小型算例上测试目的是验证模型逻辑的正确性。另一部分队员则负责用Python/Numpy实现模拟退火算法。SA算法的核心在于邻域操作的设计和退火计划的调节。我们设计了三种邻域操作1随机移动一个模块2随机交换两个模块的位置3随机旋转一个模块。退火计划则采用指数降温T_{k1} α * T_k初始温度设置得足够高以接受大部分坏解最终温度足够低以稳定收敛。通过调整α、马尔可夫链长度等参数我们在几小时内就能得到比随机布局好得多的解。这个SA框架将成为我们攻克后续更复杂问题的利器。3. 问题二多目标优化与约束复杂化问题一建立了单目标线长基础模型。问题二往往会引入更现实的复杂性通常是多目标优化和更多样、更严格的约束。例如目标可能变为同时最小化总线长和最大温度热分布或者最小化线长和芯片面积。约束可能增加布线通道拥挤度约束、电源网络电压降约束等。3.1 多目标处理加权求和与帕累托前沿面对最小化线长F1和最小化最大温度F2两个目标我们无法找到一个解同时使两者都达到最小。数学上常用的方法是加权求和法构造一个新的单目标函数 F ω1 * F1 ω2 * F2。其中ω1和ω2是权重系数反映了我们对两个目标的重视程度。这是最直接的方法但权重的选择非常主观且不同的权重会导向不同的最优解。在竞赛中我们可以选取几组不同的权重如 (1,0), (0.7,0.3), (0.5,0.5), (0.3,0.7), (0,1)分别求解从而得到一组在“线长-温度”权衡曲线上分布的解。帕累托最优更高级的做法是寻找帕累托最优解集。一个解是帕累托最优的意味着不存在另一个解能在不恶化任何一个目标的情况下改进至少一个目标。我们可以采用多目标进化算法如NSGA-II来搜索这个解集。NSGA-II通过非支配排序和拥挤度距离计算能够维持一个多样化的、逼近真实帕累托前沿的解种群。对于本题可以将每个“个体”编码为一个布局方案遗传操作交叉、变异对应于模块位置的交换或移动。注意事项热模型的建立是关键难点。芯片温度与模块的功耗密度及其分布密切相关。一个简化的热模型可以是将芯片区域网格化每个网格点的温度近似为所有模块热源对其影响的叠加类似于热传导方程的解。模块的功耗可以假设为定值或与其工作频率相关。计算最大温度需要求解一个线性方程组或进行卷积运算计算量较大。在算法中这将是目标函数评估中最耗时的部分需要考虑设计快速近似方法比如利用热阻网络模型或预先计算好的热影响系数矩阵。3.2 复杂约束的集成可行解导向的启发式搜索当约束变得更加复杂和精细时像问题一中那样简单地用惩罚函数法可能效果变差因为违反复杂约束的代价难以量化导致搜索在不可行区域徘徊过久。可行解优先策略改进模拟退火或进化算法的接受准则。在从当前状态生成新状态邻域解后首先判断其是否满足所有硬约束如边界约束、预放置约束。如果不满足直接拒绝。对于软约束或难以严格满足的约束如拥挤度则采用惩罚函数。这样可以保证搜索过程始终在硬约束构成的可行域内或边界进行。分阶段优化采用“先放置后优化”的两阶段策略。第一阶段专注于满足所有非重叠、边界等几何约束快速生成一个初始的合法布局可能线长很差。第二阶段在保持布局合法性的前提下例如只进行不导致重叠的模块微调或交换以优化线长和温度等多目标为主进行搜索。这可以通过在邻域操作中增加可行性检查来实现。拥挤度约束的处理布线拥挤度预测是布局中的高级话题。一个简化模型是将芯片区域划分为均匀的全局布线栅格G-cell估算穿过每个G-cell边界的连线数量。约束可以设置为每个边界的连线数不超过其通道容量。在评估一个布局时我们需要一个快速的拥塞评估模型这通常基于模块的引脚位置和全局布线Global Routing的估算例如使用更简化的“最小生成树”或“斯坦纳树”来近似每条线网的布线路径然后统计栅格占用情况。违反拥挤度的地方在目标函数中施加惩罚。我们在解决该问题时将加权求和法与改进的模拟退火结合。SA的目标函数为Cost ω1 * Total_HPWL ω2 * Max_Temperature ρ * Congestion_Penalty。其中拥挤度惩罚项ρ * Congestion_Penalty是动态调整的如果当前解拥挤度很高则适当增大惩罚系数ρ引导搜索离开拥挤区域反之则减小。这种自适应惩罚函数技巧在实践中非常有效。4. 问题三大规模实例求解与算法加速问题三通常会提供一个规模大得多的测试用例模块数可能上百甚至更多并可能要求比较不同算法或策略的性能。这是对团队算法工程能力和计算资源利用能力的终极考验。4.1 层次化布局与分治策略面对大规模问题直接进行扁平化的优化搜索如SA在整个芯片区域移动所有模块效率极低容易陷入局部最优。必须采用层次化Hierarchical或分治Divide-and-Conquer的策略。递归二分法这是VLSI物理设计中最经典的布局算法之一。核心思想是先将所有模块视为一个集合然后递归地将芯片区域划分为更小的子区域同时将模块集合也划分为两部分分别分配到两个子区域中并力求使两个子区域间的连线数量最少即最小割。这个过程递归进行直到子区域小到只包含少数几个模块再在这些小区域内进行精细优化如用问题二的SA。递归划分可以用多层图划分算法如METIS高效实现。聚类与粗化在划分之前可以先将连接紧密的模块聚类成一个“超模块”。这样在高层级的划分中操作的对象数量大大减少提高了效率。完成高层级布局后再对每个“超模块”进行解聚和内部细粒度布局。我们的实现方案是首先使用图划分工具如METIS的Python接口对模块连接图进行递归二分得到一个布局的树形结构分割树。然后自底向上地处理这棵树。对于叶子节点包含几个到十几个模块的小簇我们调用高度优化的模拟退火例程进行精细布局此时由于规模小SA可以很快找到优质解。然后我们将这些小簇的中心位置固定将它们视为新的“宏模块”向上一层再对上一层由这些“宏模块”构成的簇进行布局优化此时主要调整的是簇之间的相对位置。这种由细到粗再由粗到细的迭代优化框架能有效处理大规模问题。4.2 计算加速与并行化大规模布局评估非常耗时尤其是线长和拥挤度的估算。必须进行算法加速。增量式评估在模拟退火中每次邻域操作移动或交换两个模块只改变局部布局。因此不需要重新计算整个芯片的总线长。我们可以只更新那些受到影响的线网的HPWL。这需要维护一个从模块到线网的索引关系。增量式评估可以将每次迭代的成本评估时间降低1-2个数量级。近似评估与早期拒绝在SA的高温阶段可以接受很多坏解此时对解的评估可以不用非常精确。我们可以采用更快的、但精度较低的线长估算模型如重心模型或者只对部分线网进行采样评估。当温度降低接近收敛时再切换到精确的全量评估。这种多精度评估策略能节省大量时间。并行计算布局问题天然适合并行。我们可以将SA的马尔可夫链进行并行化并行退火或者在对种群进化的多目标算法中对种群内个体的评估进行并行。我们当时使用了Python的multiprocessing库将目标函数评估任务分配到多个CPU核心上获得了接近线性的加速比。踩坑实录在实现增量式评估时我们最初没有处理好线网数据的更新一致性导致在交换两个模块后部分线长的计算出现错误使得搜索方向完全混乱。调试这类问题非常痛苦。后来我们建立了一个严格的数据变更日志每次邻域操作后都记录下哪些模块的坐标发生了变化然后根据日志精确地更新受影响的线网数据。这个教训告诉我们在优化算法中数据结构的正确性和一致性远比算法本身的复杂性更重要。一个清晰的、模块化的代码结构是快速迭代和调试的基础。5. 模型验证、灵敏度分析与总结提升完成模型求解后还需要对结果进行分析体现建模的严谨性。5.1 结果可视化与模型验证“一图胜千言”。对于布局问题将最终结果可视化是必不可少的。布局图使用Matplotlib或更专业的绘图库将芯片边界、每个模块用矩形表示可填充不同颜色代表不同类型或功耗、以及关键的互连线用折线表示画出来。这能直观地检查布局是否合理模块是否堆积、连线是否绕远。热力图如果考虑了温度可以绘制芯片表面的温度分布热力图直观显示热点Hot Spot位置。拥挤度地图绘制布线通道的拥挤度分布用颜色深浅表示拥挤程度预判后续布线的难点区域。模型验证通过与简单基准对比来验证模型有效性。例如可以手动构造一个已知最优解的小例子比如所有模块排成一行看我们的算法能否找到或逼近该最优解。也可以将我们的结果与一些开源布局工具虽然不一定是PISA架构在标准化算例上的结果进行趋势性对比。5.2 灵敏度分析与策略讨论这是论文升华的部分体现我们对问题的深度思考。权重灵敏度分析对于多目标加权求和法分析权重系数ω1, ω2的变化如何影响最终布局的线长和温度。可以绘制出权重空间到目标空间的映射关系图讨论权重的选择策略。关键约束影响分析探讨如果放松或收紧某个关键约束如时序约束阈值、拥挤度上限对最终布局质量的影响有多大。这能为芯片设计者提供决策参考。算法参数调优分析讨论模拟退火中初始温度、降温系数、马尔可夫链长度等参数对求解质量和速度的影响。可以展示参数调优的过程和结果。扩展性讨论我们的模型和算法还有哪些局限性例如我们假设模块是矩形的且不可变形现实中可能是软模块Soft Macro我们的热模型是稳态的未考虑瞬态热效应我们未考虑多层布线等。可以简要讨论这些扩展方向体现思维的开放性。最后在论文写作中一定要将整个建模、求解、分析的过程逻辑清晰地呈现出来。从问题分析、模型假设、符号说明到模型建立、算法设计、结果展示、分析讨论形成一个完整的闭环。图表要精美分析要透彻将我们这四天三夜的思考与努力凝结成一份既有理论深度又有实践价值的解决方案。这道题虽然背景专业但剥开外壳它考察的正是数学建模最核心的能力抽象、转化、求解与解释。能完整走通这个过程无论获奖与否都已是一次宝贵的历练。
返回列表