算子是组成模型的基本单元,而自定义算子往往存在优化空间。
为了验证自定义算子Vadd_sample的性能,基于向量加法构建了复杂样例算子Vadd_sample,并使用Profiling工具对其性能进行分析。由于Vadd_sample是在向量加法基础上,构建的一个复杂算子,只在Vector上执行,因此算子的性能指标可通过AI Core Metrics视图下的vec_ratio(向量类运算指令的cycle数在所有指令的cycle数中的占用比)字段来判断。查看分析结果中Vadd_sample算子的vec_ratio指标,发现数值较低,未达到最优性能。由此可以得出结论,自定义算子Vadd_sample未达到最优性能并存在优化空间。
工程执行完成后,MindStudio窗口下方自动展示Profiling结果视图。如图4所示。
首先,用户可通过查看Timeline,感知应用的整体运行情况。然后结合调色盘功能,可方便地标记和发现耗时超标的API/算子,结合API/算子的统计表格(Statistics)可初步定位潜在瓶颈。最后,通过观测算子的AI Core Metrics即分析算子是否存在性能不足和优化空间,可以最终确定优化切入点。
在本例中,由于只有一个算子对大量数据做处理,因而可直接切入分析AI Core Metrics。Vadd_sample是一个计算密集的Vector算子,因此需要关注vec_ratio(向量类运算指令的cycle数在所有指令的cycle数中的占用比,代表着资源利用率)是否达标。如图5所示。
可以看到AI Core Metrics视图中,Vadd_sample的vec_ratio最大仅达到0.639,而vec_ratio指标取值越接近1资源利用率越高,故此可以判断Vadd_sample算子存在可优化空间。
到此Profiling性能分析工具的任务完成。
为了优化Vadd_sample算子,考虑结合“TIK优化指南”对Vadd_sample算子采取双核并行、double buffer等优化方式,提升Vadd_sample的Vector计算资源利用率,最终减少算子执行耗时。
具体编程操作请开发者自行完成。
完成Vadd_sample算子的优化后,对推理应用重新执行Profiling性能分析操作得到新的结果,再次查看AI Core Metrics视图,如图6所示。
可以看到优化后AI Core Metrics视图中的vec_ratio指标平均达到0.83左右,说明Vadd_sample的Vector计算资源利用率得到了提升。
通过Profiling性能分析工具前后两次对网络应用推理的资源利用率进行分析,并对比前后算子优化结果可以得出结论,自定义算子Vadd_sample未达到最优性能,存在优化空间。