In questo documento vengono riassunte le linee guida per l'implementazione e la revisione di un op per l'interprete. Abbiamo intenzionalmente incluso alcuni elementi di azioni ausiliarie relativi al verificatore e all'inferenza di tipo, con l'idea di fare progressi su questi fronti insieme all'implementazione dell'interprete.
Durante l'implementazione dell'operazione
- Fornisci una strategia di test esplicitamente scritta (in una descrizione PR) simile a questa da utilizzare come riferimento durante la revisione 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 dettagli di implementazione complicati e potenziali lacune funzionali.
- Invia i ticket per i componenti software corrispondenti se rilevi bug o funzionalità mancanti.
Dopo aver implementato l'operazione
In StablehloOps.td:
- Assicurati che
summary
nell'ODS dell'operatore segua il formato standard. (ticket correlato) Aggiungi commenti che fanno riferimento alle etichette dei vincoli (ad es.
Cn
oIn
) della specifica nel formatoxyz_cn
oxyz_in
, per l'operazioneXyzOp
, per identificare la corrispondenza tra i vincoli nell'ODS e la specifica. L'esempio seguente mostra come aggiungere le etichette dei vincoli come commenti insieme a mlirTraits
eTypeConstraints
. La notaxyz_c4
fa riferimento ai vincoli definiti nella classeStableHLO_FooOp
(ad es.StableHLO_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 che contengono frasi come "Verifica le seguenti proprietà: …".
- Aggiungi commenti che fanno riferimento alle etichette dei vincoli (ad es.
Cn
oIn
) della spec nel formatoxyz_cn
oxyz_in
, per l'operazioneXyzOp
, per identificare le parti dei verificatori e delle funzioni di forma corrispondenti ai vincoli nella specifica.- È possibile 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 sono presenti vincoli consecutivi,
riassumili come
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - In caso di mancata corrispondenza tra i vincoli nell'implementazione e quelli nella specifica, assicurati che esista un problema aperto che rifletta la discrepanza.
- È possibile 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 sono presenti vincoli consecutivi,
riassumili come
Nei test dell'interprete:
- Aggiungi un file denominato
<op_mnemonic>.mlir
. - Scrivi i test seguendo le linee guida per i test.
- Aggiungi un file denominato
Nella directory testdata:
- Esegui tutti i test disattivati coperti dall'operazione appena aggiunta.
- Se i test vengono superati, attivali convertendo
RUN-DISABLED
inRUN
. - Se un test non va a buon fine per un motivo diverso dalle mancate corrispondenze di precisione, correggi l'implementazione/il test.
- Per le mancate corrispondenze di precisione, tagga il test con
RUN-DISABLED(#1278)
(se non lo hai già fatto).
-
- Assicurati che sia presente almeno un test (positivo o negativo) per ogni vincolo nei metodi di verifica e di inferenza del tipo. I vincoli trattati nell'ODS non verranno testati. Questi test saranno per lo più negativi, per verificare che i vincoli non siano soddisfatti o positivi e per verificare che la forma dedotta sia corretta.
- Assicurati che tutti i test relativi all'operazione in esame siano raggruppati.
- Assicurati che tutti i test relativi all'operazione da testare siano preceduti da una macro accesa
CHECK-LABEL
. - Scegli il nome della funzione dei test utilizzando il formato
xyz_cn_im_...
per una funzione di test dei 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 ordine alfabetico in base al nome della funzione.
- Continua ad aggiungere test finché 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 di 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
stablehlo/tests/interpret/<op_mnemonic>.mlir
nella sezione "Esempi" (ad es. Altri esempi). - Assicurati che la specifica abbia un solo esempio.
- Assicurati che l'esempio di specifiche rispetti le linee guida per i test.
- Assicurati che il test di esempio di specifica sia interpretabile.
- Assicurati che l'esempio di specifiche sia lo stesso di quello presente nell'ODS.
- Aggiungi un link a
In status.md:
- Aggiorna la colonna "Interprete" in
yes
.
- Aggiorna la colonna "Interprete" in