In diesem Dokument werden die Richtlinien für die Implementierung und Überprüfung eines Vorgangs für den Interpreter zusammengefasst. Wir haben absichtlich einige zusätzliche Maßnahmen in Bezug auf die Verifizierung und Typinferenz aufgenommen, um neben der Implementierung des Dolmetschers auch in diesen Bereichen Fortschritte zu erzielen.
Während der Implementierung
- Stellen Sie eine ausdrücklich schriftliche Teststrategie (in einer PR-Beschreibung) bereit, die dieser ähnelt, die Sie bei der Überprüfung der Verifizierungs- und Typinferenzmethoden sowie der entsprechenden Tests als Referenz verwenden können. Die prüfende Person prüft, ob die Beschreibung vollständig ist.
- Mit hlo_evaluator können Sie schwierige Implementierungsdetails und potenzielle Funktionslücken ermitteln.
- Reichen Sie Tickets für die entsprechenden Softwarekomponenten ein, wenn Sie Fehler finden oder Funktionen fehlen.
Nach der Implementierung des Vorgangs
Führen Sie in StablehloOps.td folgende Schritte aus:
- Achten Sie darauf, dass
summary
in der ODS des Vorgangs dem Standardformat entspricht. (ähnliches Ticket) Fügen Sie Kommentare zu Einschränkungslabels (z.B.
Cn
oderIn
) aus der Spezifikation im Formatxyz_cn
oderxyz_in
für VorgangXyzOp
hinzu, um die Korrelation zwischen Einschränkungen in ODS und der Spezifikation zu ermitteln. Das folgende Beispiel zeigt, wie Sie die Einschränkungslabels zusammen mit mlirTraits
undTypeConstraints
als Kommentare hinzufügen. Hinweisxyz_c4
bezieht sich auf die in der KlasseStableHLO_FooOp
definierten Einschränkungen (z.B.StableHLO_ShapedInterfaceOp
,StableHLO_UnaryElementwiseOp
,StableHLO_Op
usw.).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*/ .... ); );
- Achten Sie darauf, dass
Führen Sie in TypeInference.cpp und StablehloOps.cpp folgende Schritte aus:
- Löschen Sie Kommentare wie „Folgende Eigenschaften prüfen: ...“.
- Fügen Sie Kommentare zu Einschränkungslabels (z.B.
Cn
oderIn
) aus der Spezifikation im Formatxyz_cn
oderxyz_in
für OpXyzOp
hinzu, um zu ermitteln, welche Teile von Verifizierern und Formfunktionen welchen Einschränkungen in der Spezifikation entsprechen.- Ein Kommentar mit mehreren Einschränkungslabels oder mehrere Kommentare mit demselben Einschränkungslabel sind zulässig. Alles hängt davon ab, wie die Einschränkungen implementiert werden. Wenn es aufeinanderfolgende Einschränkungen gibt, fassen Sie sie zu
xyz_cn...xyz_cm, xyz_in...xyz_jn
zusammen. - Falls eine Abweichung zwischen den Einschränkungen in der Implementierung im Vergleich zu denen in der Spezifikation vorliegt, prüfen Sie, ob ein offenes Problem vorliegt, das diese Abweichung widerspiegelt.
- Ein Kommentar mit mehreren Einschränkungslabels oder mehrere Kommentare mit demselben Einschränkungslabel sind zulässig. Alles hängt davon ab, wie die Einschränkungen implementiert werden. Wenn es aufeinanderfolgende Einschränkungen gibt, fassen Sie sie zu
-
- Fügen Sie eine Datei mit dem Namen
interpret_<op_mnemonic>.mlir
hinzu. - Schreibe Tests gemäß den Testrichtlinien.
- Fügen Sie eine Datei mit dem Namen
-
- Führen Sie alle deaktivierten Tests aus, die vom neu hinzugefügten Vorgang abgedeckt sind.
- Wenn die Tests bestanden werden, wandeln Sie
RUN-DISABLED
inRUN
um, um sie zu aktivieren. - Wenn ein Test aus einem anderen Grund als Genauigkeitsabweichungen fehlschlägt, korrigieren Sie die Implementierung/den Test.
- Taggen Sie bei Genauigkeitsabweichungen den Test mit
RUN-DISABLED(#1278)
, sofern dies noch nicht geschehen ist.
Führen Sie in ops_stablehlo.mlir folgende Schritte aus:
- Achten Sie darauf, dass für jede Einschränkung in den Prüfer- und Typinferenzmethoden mindestens ein Test (positiv oder negativ) vorhanden ist. Einschränkungen, die in ODS behandelt werden, werden nicht getestet. Diese Tests sind größtenteils negativ, wobei getestet wird, ob die Einschränkungen nicht erfüllt oder positiv sind, und es wird getestet, ob die abgeleitete Form korrekt ist.
- Achten Sie darauf, dass alle Tests, die sich auf die zu testende Operation beziehen, zusammen platziert werden.
- Achten Sie darauf, dass allen Tests, die sich auf die zu testende Operation beziehen, ein
CHECK-LABEL
-Licht-Makro vorangestellt ist. - Wählen Sie den Funktionsnamen der Tests im Format
xyz_cn_im_...
für die FunktionstesteinschränkungenCn
,Im
usw. für VorgangXyzOp
aus. Falls das vorgeschlagene Format nicht zutrifft, behalten Sie den vorhandenen Namen bei. - Sobald der obige Schritt abgeschlossen ist, sortieren Sie alle Tests im Zusammenhang mit dem Test in alphabetischer Reihenfolge nach dem Funktionsnamen.
- Fügen Sie weitere Tests hinzu, bis ccov eine Abdeckung von mindestens 90% für den Vorgang anzeigt.
-
- Achten Sie darauf, dass alle Einschränkungen im Zusammenhang mit Forminferenztests in dieser Datei vorhanden sind. Beachten Sie dabei die oben genannten Benennungsrichtlinien.
- Verschieben Sie alle Forminferenztests aus der Datei ops_stablehlo.mlir in diese Datei.
Führen Sie in spec.md folgende Schritte aus:
- Fügen Sie im Abschnitt „Beispiele“ einen Link zu
interpret_<op_mnemonic>.mlir
hinzu (z.B. Weitere Beispiele). - Die Spezifikation darf nur 1 Beispiel enthalten.
- Achte darauf, dass das Spezifikationsbeispiel den Testrichtlinien entspricht.
- Der Beispieltest der Spezifikation muss interpretierbar sein.
- Das Spezifikationsbeispiel muss mit dem in der ODS übereinstimmen.
- Fügen Sie im Abschnitt „Beispiele“ einen Link zu
In status.md:
- Ändern Sie die Spalte „Interpreter“ zu
yes
.
- Ändern Sie die Spalte „Interpreter“ zu