StableHLO 解释器核对清单

在本文档中,我们总结了实施和查看 op。我们有意包含一些辅助操作 关于验证器和类型推断的概念, 与解释器实现放在一起。

在实现操作时

  1. 在 PR 说明中提供明确编写的测试策略 类似于 这个 在审核验证和类型推断时参考 方法和相应的测试。审核人员会仔细检查 说明是否全面。
  2. 咨询 hlo_evaluator 找出棘手的实现细节和潜在的功能缺陷。
  3. 如果您发现任何 bug,请提交相应软件组件的工单。 或功能缺失问题

在实现相应操作后

  1. StablehloOps.td 中:

    1. 确保操作的 ODS 中的 summary 遵循标准格式。 (相关
    2. 添加引用限制条件标签(例如 CnIn)的注释(来自 对于操作XyzOp,格式为xyz_cnxyz_in ODS 中的约束条件与规范之间的对应关系。通过 以下示例展示了如何将限制条件标签添加为注释 以及 mlir TraitsTypeConstraints。备注 xyz_c4 是指 在 StableHLO_FooOp 类中定义的约束条件(例如 StableHLO_ShapedInterfaceOpStableHLO_UnaryElementwiseOpStableHLO_Op 等)。

       def StableHLO_XyzOp: StableHLO_FooOp<"xyz", [Trait1,
           Trait2 /*xyz_c1, xyz_c2*/, InferTensorType /*xyz_c3*/]> { /*xyz_c4*/
            ...
         let summary = "Xyz operation";
         let arguments = (ins
            1DTensorOf<[HLO_Float]>:$a, /*xyz_c5, xyz_i1*/
            HLO_Tensor:$b, /*xyz_i2*/
            ....
         );
      );
      
  2. TypeInference.cpp 中 和 StablehloOps.cpp

    1. 删除诸如“请验证以下属性: ...”。
    2. 添加引用限制条件标签(例如 CnIn)的注释(来自 对于操作 XyzOp,采用 xyz_cnxyz_in 格式的规范,用于标识 验证程序的哪些部分和形状函数对应于哪个部分 的约束。
      1. 可以添加带有多个限制条件标签的注释,也可以将 多个注释具有相同的约束条件标签。这完全取决于 限制条件的实施方式。如果存在连续约束条件, 将其压缩为 xyz_cn...xyz_cm, xyz_in...xyz_jn
      2. 如果 还是规范中的实施,请确保 反映该差异的待解决问题。
  3. 解释器测试中:

    1. 添加一个名为 <op_mnemonic>.mlir 的文件。
    2. 按照测试准则编写测试。
  4. testdata 目录中:

    1. 运行新添加的操作所涵盖的所有已停用测试。
    2. 如果测试通过,可通过将 RUN-DISABLED 转换为 RUN 来启用测试。
    3. 如果测试因某种原因(精度不匹配除外)失败,请修复 实现/测试。
    4. 对于精度不匹配的情况,请使用 RUN-DISABLED(#1278) 标记测试(如果 (还未完成)。
  5. ops_stablehlo.mlir 中:

    1. 确保每项测试都至少有一项测试(阳性或阴性) 验证器和类型推断方法中的约束条件;限制条件 不在 ODS 中的涵盖范围内。这类检测大多为阴性 测试来确认未满足约束条件或不满足约束条件为正值, 正确。
    2. 确保与被测操作相关的所有测试都已放置 。
    3. 确保与被测操作相关的所有测试均 附加一个 CHECK-LABEL 指示宏。
    4. 使用以下格式选择测试的函数名称 xyz_cn_im_...,用于测试约束条件 CnIm、 等。XyzOp如果所提议的格式不符合 应用,但保留现有名称。
    5. 完成上述步骤后,对与操作相关的所有测试进行排序 被测对象(根据函数名称的字母顺序)。
    6. 继续添加测试,直到出现 ccov 显示该操作的覆盖率不低于 90%。
  6. infer_stablehlo.mlir 中:

    1. 确保与形状推理测试相关的所有约束条件都存在 。
    2. 将任何形状推理测试从 ops_stablehlo.mlir 中移出。 复制到此文件中
  7. spec.md 中:

    1. 添加指向“stablehlo/tests/interpret/<op_mnemonic>.mlir”的链接 到“示例”部分部分 (例如,“更多示例”)。
    2. 请确保规范中只有 1 个示例。
    3. 请确保规范示例符合测试指南
    4. 确保规范示例测试是可解释的。
    5. 请确保规范示例与 ODS 中的示例相同。
  8. status.md 中:

    1. 更新“翻译工具”列设为 yes