在本文档中,我们总结了有关实现和查看解释器操作的准则。我们有意添加了一些与验证程序和类型推断相关的辅助操作项,并希望随着解释器实现在这方面不断取得进展。
实现操作时
- 提供与此处类似的明确书面测试策略(在 PR 说明中),以便在查看验证和类型推断方法以及相应测试时作为参考。审核人员会仔细检查说明是否全面。
- 请查阅 hlo_evaluator,以确定棘手的实现细节和潜在的功能缺口。
- 如果您发现任何 bug 或缺少功能,请提交相应软件组件的工单。
实现相应操作后
在 StablehloOps.td 中:
- 请确保操作的 ODS 中的
summary
遵循标准格式。(相关 ticket) 对于操作
XyzOp
,请以xyz_cn
或xyz_in
格式添加引用规范中的限制条件标签(例如Cn
或In
)的注释,以标识 ODS 中限制条件与规范之间的对应关系。以下示例展示了如何在 mlirTraits
和TypeConstraints
旁边将限制条件标签添加为注释。请注意,xyz_c4
是指StableHLO_FooOp
类中定义的约束条件(例如StableHLO_ShapedInterfaceOp
、StableHLO_UnaryElementwiseOp
、StableHLO_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*/ .... ); );
- 请确保操作的 ODS 中的
在 TypeInference.cpp 和 StablehloOps.cpp 中:
- 删除显示“请验证以下属性: ...”等内容的评论。
- 对于操作
XyzOp
,请以xyz_cn
或xyz_in
格式添加引用规范标签(例如Cn
或In
)的注释,以确定验证程序和形状函数的哪些部分对应于规范中的哪些限制条件。- 可以具有一条具有多个限制条件标签的注释,也可以有多条带同一限制条件标签的注释。这完全取决于限制条件的实现方式。如果有连续的约束条件,请将其压缩为
xyz_cn...xyz_cm, xyz_in...xyz_jn
。 - 如果实现与规范中的限制条件不一致,请确保存在反映该差异的待解决问题。
- 可以具有一条具有多个限制条件标签的注释,也可以有多条带同一限制条件标签的注释。这完全取决于限制条件的实现方式。如果有连续的约束条件,请将其压缩为
在解释器测试中:
- 添加一个名为
interpret_<op_mnemonic>.mlir
的文件。 - 按照测试指南编写测试。
- 添加一个名为
在 testdata 目录中:
- 运行新添加的操作所涵盖的所有已停用的测试。
- 如果测试通过,将
RUN-DISABLED
转换为RUN
即可启用这些测试。 - 如果测试因精度不匹配之外的某种原因而失败,请修正实现/测试问题。
- 对于精度不匹配,请使用
RUN-DISABLED(#1278)
标记测试(如果尚未完成标记)。
在 ops_stablehlo.mlir 中:
- 请确保验证程序和类型推断方法中的每个约束条件至少有一个测试(正例或负例);ODS 中涵盖的约束条件将不会测试。这些测试大多为负数,测试未满足约束条件或为正数,并测试推断的形状是否正确。
- 确保与被测操作相关的所有测试都放在一起。
- 确保与被测操作相关的所有测试都附带有
CHECK-LABEL
照亮的宏。 - 对于操作
XyzOp
的函数测试约束条件Cn
、Im
等,使用xyz_cn_im_...
格式选择测试的函数名称。如果推荐的格式不适用,请保留现有名称。 - 完成上述步骤后,根据函数名称按字母顺序对与被测操作相关的所有测试进行排序。
- 继续添加测试,直到 ccov 显示相应操作的覆盖率不低于 90% 为止。
在 infer_stablehlo.mlir 中:
- 确保按照上述相同的命名准则,此文件中包含与形状推断测试相关的所有约束条件。
- 将 ops_stablehlo.mlir 文件中的任何形状推断测试移到此文件中。
在 spec.md 中:
在 status.md 中:
- 将“Explainer”列更新为
yes
。
- 将“Explainer”列更新为