第一次尝试使用PT的DMSA,步骤存在太多的弯弯绕绕了,这里记录一下。
一、什么是DMSA
在PT中,我们将一种operating mode(如FUNC、DFT等)和一种operating condition(如WC、WCZ、AVS等)的组合称成为scenario,显然【scenarios = modes * conditions】。PT为了节省时间,支持并行地对这些scenarios进行分析。这些scenarios通过ssh、lsf等工具被提交到不同的host上进行计算(支持多种通信工具同时工作),因此这种技术被称为Distributed Multi-Scenario Analysis(DMSA)。在计算过程中,由master process控制其它的worker processes,可以简单地认为在每个work_process上对应着一种scenario的分析,PT通过这种并行分析节省了总时间。DMSA模式通过-multi_scenario选项启动,或者将multi_scenario_enable_analysis变量设置为true。
pt_shell -multi_scenario
二、scenario、session和command focus的关系
如下图,scenario的创建由命令create_scenario完成,PT支持两种创建方式。
- 使用-common_data和-specific_data来创建scenario
create_scenario \
-name s1 \
-common_data common_data_scenarios_s1_s3.tcl \
-specific_data specific_data_scenario_s1.tcl
-common_data中指定的是多个scenarios共享的数据,-specific_data中指定的是当前创建的scenario特有的数据。与之对应的还有-common_variables和-specific_data用于指定变量。整个创建的过程类似于我们PT在单场景分析模式下创建一个新的session。
- 使用-image读取保存的session来创建scenario
create_scenario -name s4 \
-image pre_session_dmsa/s4_pre_eco_session
这里使用的session可以是PT在单场景分析模式下保存的session,也可以是DMSA模式下保存的session。该命令和restore_session比较类似,只不过这里的一个session会被当作一种scenario来进行分析。
显然,我们可以由多条create_scenario命令来创建多种scenarios。为了便于管理,PT又定义了current_session和current_scenario两条命令,这两条命令提供了更精细化的选择和控制。current_scenario是current_session的子集,只有被current_scenario选中的scenarios,才能被我们的命令所影响(remote_execute,后面会详细介绍)。所幸的是我们一般不用同时指定current_session和current_scenario,因为默认状态下,current_session下所有的scenario都是选中(focus)的状态,所以我们只需要指定current_session就行了。
三、set_host_options命令
由于DMSA是一种分布式的计算方式,所以我们需要通过set_host_options命令来指定我们需要的计算资源。下图是set_host_options的一个简单例子,如果你有很多不同类型的计算资源,显然可以多次调用set_host_options来设定你准备使用的计算资源。需要注意的是,我们会给每个scenario分配一个process(real or virtual)来进行计算。
- -local_process: 用于指定local_host上的计算资源。
- -num_processes number:用于指定有多少processes使用当前的host_option设定。
- -max_cores number: 用于指定每个process上最多使用的core。
- -protocol auto | custom | lsf | netbatch | pbs | rsh | rtda | sge | sh | ssh:用于指定local host和远程计算资源之间通信的协议,选好后还需要指定提交job和kill job的命令,这里就不展开说明了。
- -load_factor number: 用于指定每个real process可以展开成多少个process(real+virtual)。该选项的意义有两点,一是如果你的计算集群上的机器小于scenerio,可以让一台机器计算多个scenarios;二是同一台机器上的scenarios的计算交互是基于内存的,因此可以减少数据交互的时间。
还有很多其它选项,详细的说明可以参考用户手册,上面的例子还是很详细的:
redirect set_host_options.man {man set_host_options}
sh gvim set_host_options.man &
在指定好计算资源后,我们可以使用report_host_usage来查询host_option的设置。检查OK后,通过start_hosts命令让hosts上线(online)。
report_host_usage
start_hosts
四、remote_execute命令
为了能让部分或者全部的scenarios执行我们的命令,我们首先使用current_session和current_scenario两条命令将对应的scenarios选中(focus)。然后将需要执行的命令放在remote_execute语句内,remote_execute语句支持两种类型的远程执行。
- 基于remote上下文的remote_execute(花括号),也就是说变量的值基于remote worker环境
remote_execute {
# variable all_in evaluated at worker
report_timing -from $all_in -to [all_outputs]
}
- 基于master上下文的remote_execute(双引号),也就是说变量的值基于master环境
remote_execute "
# variable all_out evaluated at master
report_timing -to $all_out
"
由于这种远程执行是针对于每个被选中的scenario,所以每个scenario都会产生对应的报告。PT同样支持基于这些被选中的scenarios产生一个总的merged的报告,此时只需要将命令放在remote_execute外执行即可。以下的命令支持产生merged的报告。
这里再补充一张user guide中的流程图帮助加深理解。
谢谢阅读!