Created by: liu-plus-wei
RuntimeInferVarType两个主要的性能瓶颈: 1. RuntimeInferVarTypeContext 的构造函数在整合Input和Output来适配静态图接口导致的高频unordered_map, vector的构造和析构 【改动】 将原有的InferVarTypeContext接口根据使用场景是Input还是Output做了拆分:
- SetType = > SetOutputType
- GetType => GetInputType
- ...
对于检查Input中是否存在/都是 某type类型的逻辑,抽象出新的接口在Context内部实现:
- InputTypeAnyOf
- InputTypeAllOf
通过拆分、新增接口达到动态图、静态图可以根据各自原有数据结构来实现接口逻辑的目的,动态图无需通过数据拷贝来适配静态图逻辑。
【遗留问题】
- 一定程度上增加了InferVarType 逻辑实现的限制,改动之后逻辑更多在Context内部实现,不建议OP定制逻辑直接操作Input、Output内部的Var List
- 暂时还保留了进行拆分的原有API,原有API改为在RuntimeInferVarType 中不可用
- save_op 中使用SetType函数操作了非Input/Output中的Var - 直接创建了新的Var,因为这个原因,暂时在RuntimeInferVartype中保留了SetType函数,不做任何操作,跟此次修改前逻辑保持一致。
2. PassInDtypeAndVarTypeToOutput ()operator中返回unordered_map导致的map反复创建和析构 【改动】 本次的改动比较简单粗暴,将创建的映射表改为static,由返回拷贝改为返回引用