在本文件中,我們將概述為轉譯器實作及審查運算元的規範。我們有意納入一些與驗證器和類型推論相關的輔助動作項目,目的是希望在實作解譯器時,能同時在這些方面取得進展。
實作 op 時
- 請提供明確書寫的測試策略 (在 PR 說明中),類似於這個,以便在審查驗證和類型推論方法以及對應的測試時做為參考。審查人員會再次確認說明是否完整
- 請參閱 hlo_evaluator,找出難以實作的詳細資料和潛在的功能差距。
- 如果您發現任何錯誤或缺少功能,可提交對應軟體元件的票證。
實作作業後
在 StablehloOps.td 中:
- 請確認運算 ODS 中的
summary
符合標準格式。(相關票券) 針對
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 中:
- 刪除含有「驗證下列屬性:...」等字詞的註解。
- 依照
xyz_cn
或xyz_in
格式,新增參照規格限制標籤 (例如Cn
或In
) 的註解 (適用於運算XyzOp
),以識別驗證器和形狀函式的哪些部分與規格中的限制對應。- 一個註解可以有多個限制標籤,或是具有相同限制標籤的多個註解。這全都取決於限制的導入方式。如果有連續的限制條件,請將這些條件濃縮為
xyz_cn...xyz_cm, xyz_in...xyz_jn
。 - 如果實作 VS 中的限制條件與規格中的限制條件不一致,請務必提出待解決的問題,反映這項差異。
- 一個註解可以有多個限制標籤,或是具有相同限制標籤的多個註解。這全都取決於限制的導入方式。如果有連續的限制條件,請將這些條件濃縮為
在轉譯器測試中:
- 新增名為
<op_mnemonic>.mlir
的檔案。 - 按照測試指南編寫測試。
- 新增名為
在 testdata 目錄中:
- 執行新加入的作業涵蓋的所有停用測試。
- 如果測試通過,請將
RUN-DISABLED
轉換為RUN
來啟用測試。 - 如果測試因為精確度不符以外的原因而失敗,請修正實作/測試。
- 如果精確度不符,請為測試加上
RUN-DISABLED(#1278)
標記 (如果尚未標記)。
在 ops_stablehlo.mlir 中:
- 請確認驗證器和類型推論方法中的每個限制,至少都有一個測試 (正面或負面);ODS 涵蓋的限制不會進行測試。這些測試大多會呈現負值,測試是否未符合限制條件,或是呈現正值,測試推斷出的形狀是否正確。
- 請確認與測試中 op 相關的所有測試都放在一起。
- 請確認與受測運算相關的所有測試,均在前面加上
CHECK-LABEL
照明巨集。 - 請使用
xyz_cn_im_...
格式選擇測試函式名稱,以便測試函式限制Cn
、Im
等,以便測試函式限制Cn
、Im
等,以便測試函式限制XyzOp
。如果提議的格式不適用,請保留現有名稱。 - 完成上述步驟後,請根據函式名稱依字母順序排序與測試中 op 相關的所有測試。
- 持續新增測試,直到 ccov 顯示 op 涵蓋率達到 90% 以上為止。
在 infer_stablehlo.mlir 中:
- 確保這個檔案中包含與形狀推論測試相關的所有限制,並遵循前述相同的命名規範。
- 將任何形狀推論測試從 ops_stablehlo.mlir 檔案移至此檔案。
在 spec.md 中:
- 將
stablehlo/tests/interpret/<op_mnemonic>.mlir
的連結新增至「示例」部分 (例如「更多示例」)。 - 請確認規格僅包含 1 個範例。
- 請務必確保規格範例符合測試規範。
- 請確認規格範例測試可解讀。
- 請確認規格範例與 ODS 中的規格範例相同。
- 將
在 status.md 中:
- 將「翻譯器」欄更新為
yes
。
- 將「翻譯器」欄更新為