W tym dokumencie znajdziesz wytyczne dotyczące sprawdzania zmian w specyfikacji. Obecnie zmiany te zazwyczaj wymagają sprawdzenia wielu rzeczy w wielu źródłach. W tym dokumencie podsumowaliśmy je, aby uprościć weryfikację:
- Sprawdź, czy w kolumnie „Specification” (Specyfikacja) w pliku status.md znajduje się wartość „yes” (tak). Jeśli dodajesz nową operację, dodaj wiersz.
- Sprawdź, czy tytuł sekcji jest zgodny z mnemotechniką operatora w ODS.
- Sprawdź, czy sekcja „Semantyki” jest zgodna z Semantyką operacji XLA.
- Sprawdź, czy sekcje „Dane wejściowe” i „Dane wyjściowe”:
- Wymień te same produkty co ODS.
- Umieść te same elementy co HloInstruction::CreateFromProto.
- są uporządkowane dokładnie tak jak ODS.
- Jeśli występują jakieś rozbieżności, sprawdź, czy istnieją odpowiednie zgłoszenia.
- Sprawdź, czy sekcja „Ograniczenia”:
- Pasuje do pliku shape_inference.cc XLA.
- Pasuje do pliku hlo_verifier.cc XLA.
- Pasuje do ODS.
- Pasuje do StablehloOps.cpp.
- Jeśli występują jakieś rozbieżności, sprawdź, czy istnieją odpowiednie zgłoszenia. Połącz wszystkie te bilety w specyfikacji w możliwie najbardziej szczegółowych lokalizacjach (np. jeśli zgłoszenie dotyczy ograniczenia, które nie zostało zaimplementowane, połącz zgłoszenie bezpośrednio z tym ograniczeniem).
- Jeśli odpowiednie części pliku ODS i StablehloOps.cpp są zgodne ze specyfikacją, sprawdź, czy w kolumnach „Weryfikacja” i „Wnioskowanie typu” w pliku status.md jest podana wartość „yes”.
- Sprawdź, czy sekcja „Przykłady”:
- Zawiera tylko 1 przykład. (W przyszłości podamy więcej przykładów z pakietu testowego tłumacza StableHLO).
- Wykorzystuje prawidłową składnię MLIR, uruchamiając
stablehlo-opt
na przykładach kodu. - Wykorzystuje ogólną składnię MLIR, którą można uzyskać, uruchamiając
stablehlo-opt -mlir-print-op-generic
. W specyfikacji przestrzegamy ogólnej składni, aby uniknąć konieczności zmiany specyfikacji w przypadku zmian w ładowarce.
- Sprawdź, czy
description
w ODS operacji:- Zawiera pierwsze zdanie specyfikacji.
- Następnie udostępnia link do odpowiedniej sekcji specyfikacji.
- Następnie użyto tego samego przykładu co w specyfikacji, ale z użyciem prostej składni, którą można uzyskać, uruchamiając polecenie
stablehlo-opt
.
- Sprawdź, czy pliki związane z implementacją ograniczeń weryfikacji i wnioskowania typu są zgodne z tymi wytycznymi:
- Postępuj zgodnie z wytycznymi nr 1 dotyczącymi StablehloOps.td.
- Postępuj zgodnie z wytycznymi #2 dotyczącymi TypeInference.cpp i StablehloOps.cpp.
- Postępuj zgodnie z wytycznymi #5 dotyczącymi pliku ops_stablehlo.mlir.
- Postępuj zgodnie z wytycznymi nr 6 dotyczącymi pliku infer_stablehlo.mlir.
- Oceń operację pod kątem efektów ubocznych i spekulacji.
- Jeśli operacja nie ma skutków ubocznych i zawsze można jej spekulować, nadaj jej cechę
Pure
. Jest to rzadkie, ponieważ większość operacji zezwala na dynamiczne kształty, co może prowadzić do niezgodności kształtów w czasie działania, co jest niezdefiniowanym zachowaniem. Niektóre operacje mogą mieć niezdefiniowane zachowanie w innych sytuacjach. Zdecydowana większość działań nie ma skutków ubocznych (powinien mieć cechęNoMemoryEffect
). - Większość działań kwalifikuje się do jednej z cech
HLO_SpeculatableIf*
. Jeśli Twoja opcja nie pasuje do żadnej z tych opcji, nadaj jej cechęConditionallySpeculatable
i zaimplementuj metody interfejsu. Dodaj testy do polastablehlo/tests/ops_speculatability.mlir
, aby objąć logikę spekulacji.
- Jeśli operacja nie ma skutków ubocznych i zawsze można jej spekulować, nadaj jej cechę