算子优化分析
维度一:分析向量指令执行效率
根据仿真dump文件,解析向量指令的repeat_times和mask参数,找出执行效率低向量指令,并给出分析结果:
输出字段参数解释:
- Instruction:指令名称。
- First PC:指令地址,根据取值仿真dump文件中可搜索到对应的重复向量指令。
- Execution Times:向量指令被重复执行的次数。
- Repeat:即repeat_times参数,表示一条向量指令的重复迭代次数,取值范围为(0,255]。
- Mask:向量内参与计算的元素,取值范围为[1,128],单位为bits。每一个bit位用来表示vector的每个元素是否参与操作,bit位的值为1表示参与计算,0表示不参与计算。
有关分析向量指令执行效率的具体参数应用请参见《TBE自定义算子开发指南》中的“接口参考>TBE TIK API>矢量计算>单目”章节。
优化建议:
通过修改向量指令参数mask和repeat_times,替代重复执行的向量指令。
根据字段First PC的值从仿真dump文件中可搜索到对应的重复向量指令,如上图所示Execution Times取值为64,Repeat取值为1,Mask取值为1,则该指令被重复执行了64次,而一次执行只进行了一次迭代计算,每次只计算了该向量中的一位元素。那么为了提高该指令的执行效率,可以通过修改算子代码中的repeat_times参数值为64,最后根据向量位数以及实际需求修改mask的值,修改后该指令只需执行一次即可完成64次迭代计算并且每次计算都完成向量在场景下要求计算的所有元素,从而提升该条指令执行的效率。
维度二:分析流水打断
根据仿真dump文件,针对占比最大的流水进行分析,主要从三个维度进行:
- 其它流水导致的流水不连续。
- 指令入队列导致的流水不连续。
- pipe_barrier(PIPE_ALL)导致的流水打断。
根据分析的结果,对上述三个维度造成影响的周期数进行排序,结果展示如下:
输出字段参数解释:
- Interruption Factor:流水打断因素。
- Affected Pipeline:受影响的流水。
- Interruption Cycles:流水打断的周期数。
- Percentage to Total:打断周期数占总周期数的百分比。
优化建议:
- 使用乒乓策略。
- 优化不合理的流水依赖。
- 消除流水间不合理的指令同步。
- 删除冗余pipe_barrier(PIPE_ALL)指令。
父主题: 输出结果和优化建议