In diesem Dokument sind die Richtlinien für die Implementierung und Überprüfung eines Operation für den Interpreter. Wir haben absichtlich ein paar Hilfsmaßnahmen eingefügt, Elemente in Bezug auf die Verifizierung und Typableitung mit dem Ziel, Fortschritte zu erzielen neben der Dolmetscherimplementierung.
Bei der Implementierung des Vorgangs
- Stelle eine ausdrücklich schriftliche Teststrategie bereit (in einer PR-Beschreibung). ähnlich wie dies verwenden bei der Überprüfung der Verifizierung und Typableitung als Referenz. und die entsprechenden Tests. Der Prüfer überprüft dann noch einmal, ist die Beschreibung umfassend.
- Beratung hlo_evaluator um komplizierte Implementierungsdetails und potenzielle Funktionslücken zu identifizieren.
- Tickets für die entsprechenden Softwarekomponenten einreichen, wenn Sie Fehler finden oder fehlende Funktionen.
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. (Zugehöriges Ticket) Fügen Sie Kommentare zu Einschränkungslabels (z.B.
Cn
oderIn
) aus dem im Formatxyz_cn
oderxyz_in
, für VorgangXyzOp
, zur Identifizierung des Übereinstimmung zwischen den Einschränkungen in der außergerichtlichen Streitbeilegungsstelle und der Spezifikation. Die Das folgende Beispiel zeigt, wie Sie die Einschränkungslabels als Kommentare hinzufügen zusammen mit MLirTraits
undTypeConstraints
. Hinweisxyz_c4
bezieht sich auf in der KlasseStableHLO_FooOp
definierte 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
In TypeInference.cpp und StablehloOps.cpp:
- Löschen Sie Kommentare mit Informationen wie „Überprüfen Sie die folgenden Eigenschaften: ...“.
- Fügen Sie Kommentare zu Einschränkungslabels (z.B.
Cn
oderIn
) aus dem Spezifikation im Formatxyz_cn
oderxyz_in
, für VorgangXyzOp
, zur Identifizierung welche Teile von Verifier und Formfunktionen welchen in der Spezifikation.- Es ist in Ordnung, wenn Sie einen Kommentar mit
mehreren Einschränkungslabels haben oder
mehrere Kommentare mit demselben Einschränkungslabel. Alles hängt davon ab,
wie die Einschränkungen umgesetzt werden. Bei aufeinanderfolgenden Einschränkungen
und fassen Sie sie zu
xyz_cn...xyz_cm, xyz_in...xyz_jn
zusammen. - Für den Fall, dass es eine Diskrepanz zwischen den Einschränkungen in der und denjenigen in der Spezifikation, ist ein offenes Problem, das diese Diskrepanz widerspiegelt.
- Es ist in Ordnung, wenn Sie einen Kommentar mit
mehreren Einschränkungslabels haben oder
mehrere Kommentare mit demselben Einschränkungslabel. Alles hängt davon ab,
wie die Einschränkungen umgesetzt werden. Bei aufeinanderfolgenden Einschränkungen
und fassen Sie sie zu
Für Interpretertests gilt Folgendes:
- Fügen Sie eine Datei mit dem Namen
<op_mnemonic>.mlir
hinzu. - Schreiben Sie Tests unter Berücksichtigung der Testrichtlinien.
- Fügen Sie eine Datei mit dem Namen
-
- Führen Sie alle deaktivierten Tests aus, die vom neu hinzugefügten Vorgang abgedeckt werden.
- Wenn die Tests bestanden wurden, aktivieren Sie sie, indem Sie
RUN-DISABLED
inRUN
konvertieren. - Wenn ein Test aus einem anderen Grund als nicht übereinstimmenden Genauigkeitswerten fehlschlägt, beheben Sie das Implementierung/Test.
- Bei Genauigkeitsabweichungen taggen Sie den Test mit
RUN-DISABLED(#1278)
(wenn noch nicht erledigt ist).
Führen Sie in ops_stablehlo.mlir folgende Schritte aus:
- Achten Sie darauf, dass für jedes Gerät mindestens ein Test (positiv oder negativ) vorhanden ist Einschränkung in den Verifier- und Typinferenzmethoden; Einschränkungen nicht getestet werden. Diese Tests sind meist negativ, Testen, ob die Einschränkungen nicht erfüllt oder positiv sind, und testen, abgeleitete Form korrekt ist.
- Achten Sie darauf, dass alle Tests für die zu testende Operation platziert sind miteinander verbinden.
- Alle Tests, die sich auf den Test beziehen, müssen
mit vorangestelltem Makro
CHECK-LABEL
. - Wählen Sie den Funktionsnamen der Tests im Format
xyz_cn_im_...
für FunktionstesteinschränkungenCn
,Im
, usw. für OperationXyzOp
. Wenn das vorgeschlagene Format nicht übernehmen, den vorhandenen Namen beibehalten. - Sortieren Sie nach Abschluss des obigen Schritts alle Tests im Zusammenhang mit der Operation. anhand des Funktionsnamens alphabetisch sortiert.
- Fügen Sie bis zum ccov weitere Tests hinzu. eine Abdeckung von mindestens 90% für den Vorgang angezeigt wird.
Führen Sie in infer_stablehlo.mlir folgende Schritte aus:
- Achten Sie darauf, dass alle Einschränkungen in Bezug auf Forminferenztests vorhanden sind in dieser Datei unter Berücksichtigung der oben genannten Benennungsrichtlinien bearbeiten.
- Verschieben Sie alle Forminferenztests aus ops_stablehlo.mlir. in diese Datei ein.
Führen Sie in spec.md folgende Schritte aus:
- Link zu
stablehlo/tests/interpret/<op_mnemonic>.mlir
hinzufügen zu „Beispiele“ Abschnitt (z.B. Weitere Beispiele). - Die Spezifikation darf nur ein Beispiel enthalten.
- Das Spezifikationsbeispiel muss den Testrichtlinien entsprechen.
- Der Test mit dem Beispiel der Spezifikation muss interpretierbar sein.
- Das Spezifikationsbeispiel muss mit den Angaben in der außergerichtlichen Streitbeilegungsstelle übereinstimmen.
- Link zu
Führen Sie in status.md Folgendes aus:
- Dolmetscher aktualisieren in
yes
.
- Dolmetscher aktualisieren in