【xla】三、【构图阶段】EncapsulateSubgraphsPass

该Pass的run函数主要作用:

  1. 定义:rewrite_subgraph function

  2. 调用:EncapsulateSubgraphsInFunctions

一、rewrite_subgraph function

作用:为子图整理/分类/关联input。

二、EncapsulateSubgraphsInFunctions

该函数主要构造:encapsulator, 用encapsulator来将graph中被标记的节点划分为一张子图。主要调用了:

  1. encapsulator.SplitIntoSubgraphs

  2. encapsulator.BuildFunctionDefs

  3. encapsulator.BuildOutputGraph

三、SplitIntoSubgraphs

  1. 作用:寻找带有group_attribute标签的节点,把带有标签的节点分别归到subgraph中。

  2. 过程:

    1. CopySubgraphNodes: 将统一标记的node放到同一张子图中。

      1. 遍历主图中每个node,将node中functionId相同的node放到一个子图中,将这些子图构建一个map<functionId, subGraph>

    2. CopySubgraphEdges:将边信息从主图中复制到子图中。

      1. 遍历每条边,获取src和dst node信息,将src/dst信息对应到子图中,根据情况为子图增加边。

        1. 同子图:直接增加边。

        2. 如果src在子图中,dst不在: 给src子图记录一个output。

        3. 如果dst在子图中,src不在: 给dst子图记录一个input。

        4. 因为上述三个条件都为if,所以不同子图会相互记一个input, output。

    3. MarkGuaranteedConstants: 为某些子图的input标记:_is_guaranteed_constant

    4. 扫描所有子图,去掉一些无用边。

四、BuildFunctionDefs

  1. 作用:遍历所有子图,将子图转换为function

  2. 过程:

    1. 通过rewrite_subgraph 完善子图

    2. BuildControlFlowInfo 验证图形是否具有格式良好的控制流结构。

    3. GraphToFunctionDef 将重写图的输入输出节点到FunctionDef的输入输出参数。

五、BuildOutputGraph:

  1. 作用:将最原始的图转换为加入FunctionDef的图。

  2. 过程:

  1. CopyNodesToOutputGraph: 复制最原始图中不带有xla标记的node。

  2. AddFunctionCallNodes: 复制FunctionCall Nodes到output 图。

  3. AddEdgesToOutputGraph: 重新构建图中边。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值