In questo documento, riepiloghiamo le linee guida per l'implementazione e la revisione di un'opzione per l'interprete. Abbiamo intenzionalmente incluso alcune azioni ausiliarie relative alla verifica e all'inferenza dei tipi, con l'idea di fare progressi su questi fronti insieme all'implementazione dell'interprete.
Durante l'implementazione
- Fornisci una strategia di test esplicitamente scritta (in una descrizione di PR) simile a questa da utilizzare come riferimento durante l'esame dei metodi di verifica e di inferenza del tipo e dei test corrispondenti. Il revisore verificherà che la descrizione sia completa.
- Consulta hlo_evaluator per identificare i dettagli di implementazione complessi e potenziali lacune funzionali.
- Invia ticket per i componenti software corrispondenti se rilevi bug o funzionalità mancanti.
Dopo l'implementazione
In StablehloOps.td:
- Assicurati che
summary
nella ODS dell'operazione segua il formato standard. (biglietto correlato) Aggiungi commenti che fanno riferimento a etichette di vincolo (ad esempio
Cn
oIn
) dalla specifica nel formatoxyz_cn
oxyz_in
, per l'operazioneXyzOp
, per identificare la corrispondenza tra i vincoli nella ODS e nella specifica. L'esempio seguente mostra come aggiungere le etichette del vincolo come commenti insieme ai fileTraits
eTypeConstraints
. Notaxyz_c4
fa riferimento ai vincoli definiti nella classeStableHLO_FooOp
(ad esempioStableHLO_ShapedInterfaceOp
,StableHLO_UnaryElementwiseOp
,StableHLO_Op
e così via).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*/ .... ); );
- Assicurati che
In TypeInference.cpp e StablehloOps.cpp:
- Elimina i commenti con frasi come "Verifica le seguenti proprietà: ...".
- Aggiungi commenti che fanno riferimento alle etichette dei vincoli (ad es.
Cn
oIn
) dalla specifica nel formatoxyz_cn
oxyz_in
, per l'operazioneXyzOp
, per identificare le parti dei verificatori e delle funzioni di forma corrispondenti a quali vincoli nella specifica.- È consentito avere un commento con più etichette di vincolo o più commenti con la stessa etichetta di vincolo. Tutto dipende da come sono implementati
i vincoli. Se ci sono vincoli consecutivi, condensali come
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - In caso di mancata corrispondenza tra i vincoli nella VS dell'implementazione e quelli nella specifica, assicurati che esista un problema in sospeso che rifletta questa discrepanza.
- È consentito avere un commento con più etichette di vincolo o più commenti con la stessa etichetta di vincolo. Tutto dipende da come sono implementati
i vincoli. Se ci sono vincoli consecutivi, condensali come
Nei test dell'interprete:
- Aggiungi un file denominato
interpret_<op_mnemonic>.mlir
. - Scrivi i test seguendo le linee guida sui test.
- Aggiungi un file denominato
Nella directory testdata:
- Esegui tutti i test disabilitati coperti dall'operazione appena aggiunta.
- Se i test hanno esito positivo, attivali convertendo
RUN-DISABLED
inRUN
. - Se un test non va a buon fine per un motivo diverso da una mancata corrispondenza di precisione, correggi l'implementazione/il test.
- In caso di mancata corrispondenza della precisione, tagga il test con
RUN-DISABLED(#1278)
(se non l'hai già fatto).
-
- Assicurati che sia presente almeno un test (positivo o negativo) per ogni vincolo nel verificatore e nei metodi di inferenza dei tipi; i vincoli coperti in ODS non verranno testati. Questi test saranno per lo più negativi, in quanto attestano che i vincoli non sono soddisfatti o positivi e che la forma dedotta è corretta.
- Assicurati che tutti i test relativi all'operazione in corso siano posizionati insieme.
- Assicurati che tutti i test relativi all'operazione sottoposta a test siano preceduti da una macro con
CHECK-LABEL
. - Scegli il nome della funzione dei test utilizzando il formato
xyz_cn_im_...
per una funzione che testa i vincoliCn
,Im
e così via per l'operazioneXyzOp
. Se il formato proposto non è applicabile, mantieni il nome esistente. - Una volta completato il passaggio precedente, ordina tutti i test relativi all'operazione in fase di test in ordine alfabetico in base al nome della funzione.
- Continua ad aggiungere test fino a quando il ccov non mostra una copertura >= 90% per l'operazione.
-
- Assicurati che tutti i vincoli relativi ai test di inferenza della forma siano presenti in questo file, seguendo le stesse linee guida per la denominazione indicate sopra.
- Sposta tutti i test di inferenza delle forme dal file ops_stablehlo.mlir in questo file.
In spec.md:
- Aggiungi un link a
interpret_<op_mnemonic>.mlir
nella sezione "Esempi" (ad es. Altri esempi). - Assicurati che le specifiche abbiano un solo esempio.
- Assicurati che l'esempio di specifica sia conforme alle linee guida per i test.
- Assicurati che il test di esempio delle specifiche sia interpretabile.
- Assicurati che l'esempio di specifica corrisponda a quello indicato nell'ODS.
- Aggiungi un link a
In status.md:
- Aggiorna la colonna "Interprete" impostandola su
yes
.
- Aggiorna la colonna "Interprete" impostandola su