Weitere Informationen zu VHLO finden Sie unter vhlo.md
.
Inkompatible Änderungen einreichen
Alle Änderungen mit Auswirkungen auf die Kompatibilität müssen den RFC-Prozess durchlaufen. Dazu gehört auch das Hinzufügen, Einstellen oder Umbenennen einer Funktion. Sobald die RFC genehmigt wurde, müssen die folgenden Schritte ausgeführt werden:
1. Versionsnummer in Version.h erhöhen und das Versionsprotokoll aktualisieren
Bevor du VHLO-Vorgänge, -Attribute, -Typen oder -Conversions aktualisierst, erhöhe die Nebenversionsnummer in Version.h und aktualisiere das Versionsprotokoll in VhloDialect.td.
Alle neu hinzugefügten VHLO-Funktionen verwenden diese aktualisierte Version. Beispiel: Nach dem Anstoßen von 0.10.0 --> 0.11.0
würde eine neue Operation in VhloOps.td Folgendes verwenden:
VHLO_Op<"abs_v2", "0.11.0", "current">
2. Erforderliche VHLO-Implementierung und Conversions hinzufügen
Der genaue Code, der zur Einbindung einer neuen Funktion erforderlich ist, variiert. In den meisten Fällen müssen jedoch die folgenden Änderungen vorgenommen werden:
- Für neue Vorgänge:
- Fügen Sie den Vorgang in VhloOps.td hinzu.
- Fügen Sie StableHLO → VHLO-Konvertierung in StablehloLegalizeToVhlo.cpp hinzu
- VHLO → StableHLO-Konvertierung in VhloLegalizeToStablehlo.cpp hinzufügen
- Für neue Versionen vorhandener Vorgänge:
- Fügen Sie den Vorgang in VhloOps.td hinzu.
- Die Zuordnung von StableHLO zu VHLO in MapStablehloToVhlo.h aktualisieren
- Fügen Sie in VhloToVersion.cpp eine Konvertierung zwischen der neuen und der alten operativen Version hinzu.
- Für neue Typen oder Attribute:
- Fügen Sie den Typ in VhloTypes.td oder das Attribut in VhloAttrs.td hinzu.
- StableHLO → VHLO-Konvertierung in StablehloLegalizeToVhlo.cpp hinzufügen
- VHLO → StableHLO-Konvertierung in VhloLegalizeToStablehlo.cpp hinzufügen
3. Einheitentests hinzufügen/aktualisieren
Der Entwickler einer inkompatiblen Änderung ist sowohl für positive als auch für negative Unittests der Funktion sowie für Kompatibilitäts-Unittests verantwortlich.
Bei den Kompatibilitäts-Unit-Tests wird stablehlo_legalize_to_vhlo.mlir aktualisiert, um sicherzustellen, dass StableHLO-Rundreisen mit der neuesten Version von VHLO funktionieren. Außerdem sind alle erforderlichen Tests zur Vorwärts- oder Rückwärtskompatibilität erforderlich. Wenn Sie beispielsweise in Version X
mit Y = X - 1
eine neue Operation hinzufügen, fügen Sie eine Testdatei wie vhlo_to_version_downgrade_invalid.0_Y_0.mlir
hinzu, aus der hervorgeht, dass die Operation vor Version X
nicht unterstützt wird. Wenn Sie eine neue Version einer Operation hinzufügen, fügen Sie eine Testdatei wie vhlo_to_version_downgrade.0_Y_0.mlir
hinzu, aus der hervorgeht, dass die Operation erfolgreich heruntergestuft werden kann.
Wenn Ihre Operation Standardattribute hat, fügen Sie Tests hinzu, die zeigen, dass die Standardwerte korrekt serialisiert und deserialisiert werden.
4. Test für versionierte Serialization hinzufügen
Nachdem Sie stablehlo_legalize_to_vhlo.mlir
Tests hinzugefügt haben, kopieren Sie die versionierte Testdatei mit der höchsten Version in eine neue Datei in der neuen Version und fügen Sie dieser Datei auch die neuen Tests hinzu. Außerdem müssen Sie mit stablehlo-translate
eine zugehörige Bytecode-Datei erstellen:
export TARGET_VERSION=1.X.0
export TARGET_FILENAME=${TARGET_VERSION//./_}
stablehlo-translate --serialize --target=$TARGET_VERSION --strip-debuginfo stablehlo/tests/vhlo/stablehlo_legalize_to_vhlo.$TARGET_FILENAME.mlir > stablehlo/tests/vhlo/stablehlo_legalize_to_vhlo.$TARGET_FILENAME.mlir.bc