Appearance
SWB 第 7 章:运行项目
来源:
swb_ug.pdf第 7 章(W-2024.09)
说明:本页按 2024 版原章结构重写,优先保留运行流程、调度规则、并发控制、运行限制和作业维护等主线内容。
本章目录
本章讨论如何在 Sentaurus Workbench 中启动、调度、限制、终止和跟踪项目运行。项目既可以从 Project Editor 启动,也可以通过命令行工具和 Scheduler 启动;运行时的行为又会受到节点依赖、运行时编辑模式、实验并发模式、run limits 以及工具级并行参数的共同影响。
从 Project Editor 运行项目
在图形界面中,最常见的入口是 Project Editor。基本流程是先在项目树中定位项目,打开项目,然后选择需要运行的节点或场景,再执行 Project > Operations > Run,也可以直接按 Ctrl+R 或点击工具栏中的运行按钮。
如果你只是想继续运行一个已经部分完成的项目,通常不需要手动一一选择所有剩余节点。Sentaurus Workbench 会根据当前场景和节点状态,默认提交 remaining nodes,也就是所有尚未处于 done 状态的节点。对于场景运行,界面还允许你在 remaining 与 all 之间切换,从而决定只跑未完成节点,还是对该场景中的所有节点重新提交。
从命令行运行项目
命令行运行主要分为两类:提交项目级作业,以及直接运行某一个节点。
使用 gsub 提交项目或节点集合
gsub 是项目提交的后端工具。它会按需预处理项目、读取队列定义、解析节点表达式,并按照队列设置把作业提交到对应的调度器或主机上。
bash
gsub [options] (FILENAME | PROJECT)常用选项包括:
-detectcycles:检查并警告循环依赖-expr "GEXPR":用通用表达式指定节点集合-nodes [<scenario> | "<list of nodes>"]:提交某个场景的剩余节点,或显式指定节点编号-maxExperiments <number>:限制同时运行的实验数-queue "queue name":强制提交到指定队列-startTime <datetime>:延迟到指定时间提交
例如:
bash
gsub -verbose -e all -q local:default @STDB@/folder/project这条命令会把给定项目中的全部节点提交到本地默认队列。
使用 gjob 直接运行单个作业
gjob 用于本地运行一个给定作业或某个项目节点。和 gsub 不同,gjob 不会读取节点级或工具级的队列分配规则,而是直接在本地执行。
bash
gjob [options] -job NAME (FILENAME | PROJECT)常用选项包括:
-job NAME:指定作业名或节点号-nice NUMBER:设置本地调度优先级-nopp:在可编辑模式下不重写节点输入文件-pack:预处理时避免产生空行
例如:
bash
gjob -verbose -job 2 -nopp -nice -10 @STDB@/folder/project这表示以较高优先级在本地运行项目的第 2 个节点,并且不覆盖该节点已有的输入文件。
从 Scheduler 运行项目
Sentaurus Workbench 在调度项目时,会同时考虑隐式依赖和显式依赖。
- 隐式依赖来自工具数据库中定义的输入输出接口。
- 显式依赖通常来自工具输入文件中的
#setdep指令或@previous@引用。
这些依赖决定了节点的提交顺序。默认情况下,SWB 采用严格依赖模型:只有当前置节点全部成功完成并处于 done 状态时,后续节点才会被提交。如果某个前置节点失败或被终止,依赖它的节点会从执行列表中移除。
不过,对于 Sentaurus Visual、Inspect、gtclsh、cshell 和 bash 这类更偏结果提取或可视化的工具,SWB 允许放宽依赖。你可以在工具属性中把 Dependency 从 strict 改成 relaxed,这样即使前置节点是 failed 或 aborted,后续节点仍可继续执行,便于从失败仿真中提取仍然有效的中间结果。

图 60:在 Tool Properties 对话框中为工具设置依赖控制。
项目运行时编辑模式
项目运行时有两种核心模式:Locked 和 Editable。
Locked 模式
项目一旦运行,就会锁定参数化表,不允许在运行过程中修改。你仍然可以继续提交额外节点,或终止节点和整个项目,但不能在运行中改变参数、实验定义或工具输入。这个模式强调一致性和可追踪性,所有节点都会在运行时重新预处理,用户手工修改过的节点输入文件也会被新的预处理结果覆盖。

图 61:项目处于 Locked 模式时的 Run Project 对话框。
Editable 模式
Editable 模式允许你在项目运行中继续修改工具、参数、实验以及节点输入文件。此时可以在运行对话框中选择 Just run, do not preprocess,让 SWB 直接使用当前已有的 pp 文件运行,而不再重写节点输入文件。
这带来了更高灵活性,但也意味着 SWB 不再对输入文件时间戳做严格一致性检查。如果你修改了参数表或关键输入,最好主动重新预处理相关节点,避免结果与输入定义不一致。

图 62:项目处于 Editable 模式时,可以选择“仅运行,不预处理”。
一般来说,如果你追求流程自动化和结果一致性,Locked 更稳妥;如果你需要边调边跑、快速修改节点输入,Editable 更适合。
实验并发模式
除了节点依赖,SWB 还允许你控制实验级的并发方式。在 Run Project 对话框的 Concurrency Mode 中主要有两种模式:
Unlimited:默认模式。只要节点依赖满足,SWB 就会立即提交节点,通常会形成近似逐步推进的执行顺序。Limited:限制同时运行的实验数。你可以填写Maximum Number of Running Experiments,让项目更接近“实验逐个推进”的执行方式。

图 63:将实验并发模式设置为 Limited。
Limited 模式在一些希望严格按 experiment 批次推进的场景中很有用,但它会降低整体调度效率,而且不能与 run limits 同时使用。
检查循环依赖
如果项目中通过 #setdep 建立了复杂的显式依赖,可以在启动前勾选 Warn Cyclic Node Dependencies。SWB 会在预处理阶段检查是否存在循环依赖,一旦发现,会给出报告并阻止节点提交。
这项检查会拉长预处理时间,因此更适合在依赖关系刚被修改、流程还不稳定时使用,而不是每次启动都启用。
配置作业执行
SWB 支持本地和集群上的串行、SMP 以及 MPI 作业。其关键配置集中在 Tool Properties 的 Parallelization 标签页。
需要重点理解的字段有:
Threads或Initial Threads:静态线程数或初始线程数Maximum Threads:运行期间允许的最大线程数MPI Processes:MPI 进程数User-Defined MPI Hosts File for Local Jobs:本地提交 MPI 作业时指定主机列表MPI Processes Distribution:提交到集群时进程如何分配到主机Min. Memory per Host (MB):每台主机最小保留内存Cluster Type与Resource Requirements:面向具体调度器声明资源需求
SWB 支持的远程调度系统包括 LSF、SGE/UGE、TM 和 Altair Accelerator。当你把作业提交到远程集群时,SWB 会根据这些参数替你申请 CPU、内存和主机资源。
对于支持共享内存并行的工具,Auto-Detect 默认开启。SWB 会在预处理后分析命令文件、命令行参数以及某些输入 TDR 文件中的并行设置,并以检测到的最高线程数作为申请资源的依据。如果担心自动检测申请过多 CPU,可以在偏好设置中通过 CPUs Auto-Detection Upper Limit 设一个上限。
对于工具级并行参数,SWB 还允许把线程数、MPI 进程数、内存和资源需求参数化。

图 64:可以把并行相关设置写成参数表达式,随实验或节点动态展开。
定义运行限制
run limits 用来控制同一用户同时运行某种工具实例的最大数量,目标是公平分配许可证和计算资源。它们默认关闭,只有在全局、站点或用户级 run limits 文件中定义后才会生效。
SWB 会通过后台进程 swblm 跟踪当前用户从 SWB 启动的各类作业数,在提交下一个作业前检查是否超过工具配额。如果配额已满,节点会保持就绪状态,等待空闲 slot。
这套机制有三个层面值得区分:
User quota:用户级总配额,定义某类工具最多可同时跑多少个Submission delay:同一工具两次提交之间的最小时间间隔Project run limits:把用户配额进一步分配到单个项目上
项目级 run limits 是在 Run Project 对话框中设置的,仅对当前项目生效:
0:不对该工具设置额外项目级限制> 0:限制该工具在当前项目中最多同时运行多少个实例

图 65:显示项目级运行限制的 Run Project 对话框。
运行中的项目也可以调整 run limits。如果你只是想改限制而不新增节点,可以选择任意节点后再次点 Run,在对话框里修改限制,然后使用 Apply Run Limits Only。

图 66:不重新提交节点,仅更新正在运行项目的 run limits。
如果你把 run limits 也应用到交互式 viewer,会在配额达到上限时看到警告框:

图 67:工具已达到运行配额时的提示。
在 run limits 生效时,你还可以通过 Nodes Running Order Under Run Limits 设置节点提交顺序:
Depth_First:优先跑完当前实验,再推进下一个实验Breadth_First:尽量同时推进更多实验,这是默认值
除了 run limits,SWB 还支持 runtime limits,也就是针对作业运行时长的监控和通知。它适用于识别超长任务,可通过运行限制文件定义告警方式、通知周期以及是否在多次通知后自动终止作业。
延迟执行项目与节点
Delayed Execution 按钮允许你把项目或一组节点的提交动作推迟到指定时刻。SWB 会立即完成预处理,但真正的节点提交会等到设定时间才开始。

图 68:设置项目或节点的延迟提交时间。
这项功能适合把任务延迟到夜间、周末或许可证空闲时段执行。不过它有两个明显限制:
- 不能给不同节点组设置不同提交时间
- 等待提交的节点不会显示独立状态色,需要通过
glog.txt判断
如果你的目标是长期优化资源使用,建议优先使用动态 run limits 时间表,而不是频繁依赖手工延迟提交。
手册还提到,如果网络文件系统较慢,前一个节点的输出文件可能来不及同步到后一个节点。此时可以在偏好设置中通过 Delay After Simulation (msec) 给相邻仿真之间增加一个固定等待时间。
保护已执行节点
SWB 支持保护已经执行完成的节点,防止这些节点在后续操作中被意外覆盖或重跑。保护并不意味着节点不能再参与预处理,而是强调其执行结果应保持稳定,不被自动运行流程轻易改写。
这类机制通常适合放在项目已经完成一部分、你希望冻结中间结果的阶段。尤其在大型参数扫描项目里,保护 done 节点可以减少误操作造成的重复计算。
重新预处理项目
当你修改了参数表、工具数据库、输入模板或某些关键配置后,重新预处理通常比直接重跑更安全。特别是在 Editable 模式中,用户很容易手工更改节点输入文件,而这些改动未必和最新参数定义保持一致。
经验上可以这样理解:
- 想保留节点文件上的手工修改并快速验证结果,可以直接运行
- 修改了参数化结构、节点依赖或模板输入,应该重新预处理
- 对大型项目做结构性调整后,最好整项目重新预处理一次
终止项目与节点
项目和节点都可以从 GUI 中终止。
终止整个项目时,可以在 Project Editor 中选择 Project > Operations > Abort,也可以在 Projects Browser 中直接选中项目后终止。终止单个运行节点时,可以在 Project Editor、Scheduler 或命令行环境中进行。
如果 SWB 所在终端意外关闭,可能会连带终止由该会话启动的 gsub 进程。若必须在脱离终端的情况下继续运行项目,可以把环境变量 SWB_DAEMONIZE 设为 1,使 SWB 和 gsub 以守护化方式运行。
bash
setenv SWB_DAEMONIZE 1更新节点状态与提取变量
SWB 会在节点状态改变时自动更新状态并提取结果变量。但对长时间运行的仿真,你也可以手工刷新,以便尽早看到已完成的中间结果。
操作方式很简单:
text
View > Refresh
F5手册特别强调,监控运行项目时应优先使用刷新而不是重新加载项目,因为刷新节点状态比重新加载整个项目更快。
自定义项目与节点的执行
SWB 允许在工具数据库里为项目和工具定义 prologue / epilogue Tcl 脚本。
项目级脚本的写法是:
tcl
set WB_tool(gsub,prologue) { ... arbitrary Tcl script ... }
set WB_tool(gsub,epilogue) { ... arbitrary Tcl script ... }节点级脚本的写法是:
tcl
set WB_tool(<tool>,prologue) { ... arbitrary Tcl script ... }
set WB_tool(<tool>,epilogue) { ... arbitrary Tcl script ... }项目级脚本适合做磁盘清理、报告生成等围绕整个运行会话的动作;节点级脚本则更适合在单个工具执行前后做准备和提取。
此外,SWB 还支持失败节点自动重跑。你可以在工具数据库中通过 rerun_failed,max_trials 指定最大重试次数,并通过 rerun_failed,criteria Tcl 脚本决定什么条件下允许重试。例如:
tcl
set WB_tool(stopo,rerun_failed,max_trials) 3
set WB_tool(sdevice,rerun_failed,criteria) { return 1 }这意味着某些失败节点可以自动再次尝试运行,而不是第一次失败后就直接停住。
查看项目文件与摘要
运行完成后,SWB 提供两类常用日志入口:
Project > Logs > Project:查看项目日志,例如glog.txtProject > Logs > History:查看项目历史记录
项目摘要通过 Project > Properties > Summary 打开,底层文件是项目目录下的 gsummary.txt。摘要通常会给出:
- 当前项目状态
- 最近修改时间和修改者
- 运行所在主机
- 活动节点与虚拟节点数
- 按状态分类的节点列表
- 每台主机上的运行时间和执行节点数
- 总运行时间
这对于回顾一次批量仿真的整体执行情况很有帮助。
识别挂起作业
对 Sentaurus Process、Sentaurus Device 等支持挂起和恢复的仿真器,SWB 可以识别从本地或远程调度器启动的挂起作业,并在 glog.txt 中记录类似:
text
Node 50 has been SUSPENDED
Node 50 has been RESUMED被挂起的节点会在单元格左下角显示暂停图标。需要注意的是,SWB 只能识别这种状态变化,并不会直接提供“挂起后再恢复”的图形化控制;真正的挂起和恢复仍需使用命令行或调度器命令手工执行。
手册给出的常见命令示例如下:
| 运行位置 | 挂起命令 | 恢复命令 |
|---|---|---|
| 本地 | kill -TSTP -12345 | kill -CONT -12345 |
| LSF | bstop 12345 | bresume 12345 |
| Altair Accelerator | nc suspend 12345 | nc resume 12345 |
| SGE | qmod -sj 12345 | qmod -usj 12345 |
| TM | qsig -s suspend 12345 | qsig -s resume 12345 |
如果调度器使用的是 STOP 而不是 TSTP 信号,许可证可能不会在挂起期间释放。遇到这种情况,需要联系 IT 侧调整调度器的挂起策略。
Sentaurus™ Workbench User Guide W-2024.09 第 7 章