2. Sentaurus 仿真任务的计算特征分析
在把 Sentaurus 任务送上集群之前,必须先回答一个工程问题:这个任务到底“吃”什么资源?是吃核数、吃内存、吃单核主频,还是吃磁盘 I/O?如果判断错了,就会出现“给了 64 核却比 8 核还慢”或“节点内存被撑爆、任务被 OOM Killer 杀掉”的典型事故。本节把 Sentaurus 器件仿真(sdevice)与工艺仿真(sprocess)的计算特征拆成五个相互耦合的维度:网格规模、物理模型复杂度、非线性求解迭代、时间步进、内存占用,并说明它们如何共同决定 CPU 时间与内存峰值。
一、网格规模:决定线性方程组阶数的第一因素
Sentaurus 器件仿真把漂移-扩散方程、泊松方程在离散网格上组装成非线性代数方程组。对三维器件,未知量大致为 N ≈ 节点数 × 每节点未知量数。以 sdevice 为例,每节点通常携带电子浓度、空穴浓度、电势,若开启热学方程再加晶格温度,开启量子修正再加量子势,因此每节点未知量常在 3~6 之间。一个 50 万节点的 3D FinFET 结构,未知量规模就是 150 万~300 万量级。
关键在于:直接法(如 SuperLU、PARDISO)的分解时间与内存大致按 O(N^1.5)~O(N^2) 增长,而迭代法(如 ILS、BiCGStab)单次迭代接近 O(N),但迭代次数会随条件数恶化而上升。因此网格从 10 万节点增到 100 万节点,直接法内存可能涨 30 倍以上,而迭代法内存只涨约 10 倍但收敛更脆弱。工程上判断“网格是否过大”的实用指标是:单节点内存占用(GB/万节点)与单次牛顿迭代墙钟时间。若单次迭代超过 30 秒,通常说明网格或模型已超出当前并行策略的舒适区。
二、物理模型复杂度:从漂移-扩散到多物理耦合
模型复杂度直接改变每节点未知量数与雅可比矩阵的稀疏结构。漂移-扩散是最轻的;加入 SRH、Auger、辐射复合只增加局部项,对矩阵带宽影响小;而开启热力学(Hydrodynamic)、晶格热(Thermodynamic)、量子势(eQuantumPotential)、陷阱动力学(eTraps)后,未知量增加且方程间强耦合,牛顿迭代的收敛半径明显缩小。经验上,从纯 DD 切换到 DD+热学+量子修正,同一结构的迭代次数可能从 6~8 次升到 15~25 次,单步时间增加 2~4 倍。
因此模型选择要遵循“按需开启”原则:先跑 DD 得到初值,再逐步加模型做续算(continuation),而不是一次性全开。这既降低收敛难度,也避免为不必要的物理付出算力。
三、非线性求解迭代:真正的时间消耗主体
sdevice 的求解是“牛顿迭代 + 线性求解”的嵌套结构。总时间 ≈ 牛顿步数 × 每步线性求解时间。牛顿步数受偏压步长、初值质量、模型耦合强度影响;线性求解时间受矩阵阶数、稀疏度、预条件子与并行效率影响。二者不是独立可调的:偏压步长放大虽减少牛顿步数,却可能直接导致不收敛;并行核数增加虽加速线性求解,但若矩阵太小,通信开销会反噬。
一个可操作的判断方法是记录日志中的迭代信息:若每步牛顿迭代稳定在 4~8 次,说明步长与模型匹配良好;若频繁出现 20 次以上或触发“Newton did not converge”,应先减小电压步长或改用阻尼/续算,而不是盲目加核。
四、时间步进:瞬态与准静态的差异
瞬态仿真(如开关特性、单粒子翻转)在时间轴上自适应步进:步长由局部截断误差控制,器件状态剧烈变化时步长自动缩小,导致步数激增。一个 1 μs 的瞬态,若平均步长 1 ns,就是 1000 个时间点,每点又要若干牛顿迭代,总计算量可达准静态扫描的数十倍。因此瞬态任务更适合“多节点并行 + 每节点适度核数”,而不是单节点堆核。
五、内存占用:决定能否上机的硬约束
内存峰值主要由矩阵存储、预条件子、网格与解向量决定。直接法需要保存 LU 因子,内存通常是矩阵本身的 3~10 倍;迭代法只需矩阵与少量向量,内存约为直接法的 1/3~1/5。因此“内存不够”时,优先考虑切换线性求解器或降低网格,而不是简单换大内存节点。
六、把五个维度落到资源决策上
综合来看,资源分配应遵循“内存优先、核数其次、主频最后”的顺序。先估算内存峰值:若采用直接法,按 内存 ≈ 未知量数 × 每未知量字节数 × 因子(3~10) 粗估;若超出节点内存,就换迭代法或降网格。再估算 CPU 时间:以单次牛顿迭代墙钟为基准,乘以预计牛顿步数与时间点数。最后才考虑并行核数,并注意并行效率在 16~32 核后常明显下降。
下面给出一份可直接对照使用的资源评估记录表,用于在提交批量任务前快速判断单个算例的资源画像。表中数值为示例性经验区间,实际应以本机日志为准。
| 维度 | 观察指标 | 示例性经验区间 | 越界时的优先动作 |
|---|---|---|---|
| 网格规模 | 节点数、未知量数 | 3D 单管 10 万~100 万节点 | 局部加密改为全局粗化 + 自适应 |
| 模型复杂度 | 每节点未知量数 | DD 为 3,加量子/热学为 5~6 | 分阶段续算,先 DD 后加模型 |
| 非线性迭代 | 每步牛顿次数 | 4~8 次为健康 | 减小偏压步长、启用阻尼 |
| 时间步进 | 瞬态总步数 | 1 μs 约 10³ 步量级 | 放宽截断误差或分段续算 |
| 内存占用 | 峰值 / 节点内存 | 建议 < 70% | 换迭代求解器或降网格 |
需要强调的是,这五个维度并非独立:网格加密会同时抬高内存与迭代时间;模型耦合会放大牛顿步数;瞬态步长缩小会成倍增加总迭代量。因此批量仿真工程中,最有效的优化往往不是“加机器”,而是先做一次单算例的特征画像,找出真正的瓶颈维度,再针对性地调整网格、模型、步长或求解器。这样才能让后续的批量调度建立在可预测的资源需求之上,而不是靠反复试错。