Created by: phlrain
动态图反向执行的时候,每个op会创建一个 临时output map,并构造一个映射,用来记录临时变量和真实变量之间的映射表,映射表用来进行梯度的聚合
本pr做了3个优化
- 临时map的构造不在通过insert的方式添加元素,而是直接用旧的map直接构造出一个新的map,然后用新的临时VarBase替换map中的内容,用map的构造函数来替换insert,vector的reserve操作
- 映射表由 unordered_map<VarBase*, vector<shared_prt>> 替换为 vector< pair<VarBase* shared_ptr>>, 理由是,映射表的需求是记录映射关系,并没有查询的关系,因此替换掉unordered_map
- EventRecord 这些用来做timeline的功能,会在后续的动态图的timeline工具的时候再统一设计。
收益 在p40 gpu上,cuda10环境 优化前,ptb任务的一个epoch处理时间时间在106 - 111s中,时间波动比较大 优化后,一个epoch处理时间基本稳定在104 - 105 s