In questo documento, riepiloghiamo le linee guida per l'implementazione e l'esame per l'interprete. Abbiamo incluso intenzionalmente alcune azioni ausiliarie elementi correlati al verificatore e all'inferenza del tipo, con l'idea di progredire su questi fronti, insieme all'implementazione dell'interprete.
Durante l'implementazione dell'operazione
- Fornire una strategia di test esplicita scritta (in una descrizione del PR) simile a questo per utilizzare come riferimento durante la revisione della verifica e dell'inferenza del tipo e i test corrispondenti. Il revisore verificherà che descrizione sia completa.
- Consulenza hlo_evaluator al fine di identificare dettagli di implementazione complicati e potenziali lacune nelle funzionalità.
- Se rilevi bug, invia i ticket per i componenti software corrispondenti o mancanza di funzionalità.
Dopo aver implementato l'operazione
In StablehloOps.td:
- Assicurati che il valore
summary
nella notifica di risoluzione extragiudiziale delle controversie dell'operazione segua il formato standard. (biglietto correlato) Aggiungi commenti che fanno riferimento alle etichette del vincolo (ad es.
Cn
oIn
) dall'elenco nel formatoxyz_cn
oxyz_in
, per l'operazioneXyzOp
, per identificare la corrispondenza tra i vincoli in ODS e le specifiche. La l'esempio seguente mostra come aggiungere le etichette del vincolo come commenti insieme a MLRTraits
eTypeConstraints
. Nota:xyz_c4
si riferisce a 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 il valore
Nel file TypeInference.cpp e StablehloOps.cpp:
- Elimina i commenti che contengono frasi del tipo "Verifica le seguenti proprietà: ...".
- Aggiungi commenti che fanno riferimento alle etichette del vincolo (ad es.
Cn
oIn
) dall'elenco nel formatoxyz_cn
oxyz_in
, per l'operazioneXyzOp
, per identificare a quali parti dei verificatori e funzioni di forma corrispondono i vincoli nella specifica.- È consentito avere un commento con più etichette di vincolo o avere
più commenti con la stessa etichetta di vincolo. Tutto dipende
il modo in cui vengono implementati i vincoli. Se ci sono vincoli consecutivi,
condensali come
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - Nel caso in cui ci sia un'errata corrispondenza tra i vincoli in VS e nella specifica, assicuratevi che ci siano un problema aperto che riflette questa discrepanza.
- È consentito avere un commento con più etichette di vincolo o avere
più commenti con la stessa etichetta di vincolo. Tutto dipende
il modo in cui vengono implementati i vincoli. Se ci sono vincoli consecutivi,
condensali come
-
- Aggiungi un file denominato
<op_mnemonic>.mlir
. - Scrivi 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 hanno esito positivo, abilitali convertendo
RUN-DISABLED
inRUN
. - Se un test non va a buon fine per qualche motivo diverso dalla mancata corrispondenza della precisione, correggi il implementazione/test.
- Per le mancate corrispondenze nella precisione, tagga il test con
RUN-DISABLED(#1278)
(se non l'hai già fatto).
-
- Assicurati che ci sia almeno un test (positivo o negativo) per ogni un vincolo di verifica e di inferenza del tipo; vincoli coperti dalla ODS non verranno testati. Questi test saranno per lo più negativi per verificare che i vincoli non siano soddisfatti o positivi, per verificare che la forma dedotta sia corretta.
- Assicurati che tutti i test relativi all'operazione in corso vengano eseguiti in sinergia.
- Accertati che tutti i test relativi all'operazione in fase di test siano
preceduta 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
. Nei casi in cui il formato proposto non applica, mantieni il nome esistente. - Una volta completato il passaggio precedente, ordina tutti i test relativi all'operazione sotto il test in ordine alfabetico in base al nome della funzione.
- Continua ad aggiungere test fino al ccov mostra una copertura >= 90% per l'operazione.
-
- Assicurati che siano presenti tutti i vincoli relativi ai test di inferenza della forma in questo file, seguendo le stesse linee guida per la denominazione indicate sopra.
- Sposta tutti i test di inferenza delle forme da ops_stablehlo.mlir in questo file.
In spec.md:
- Aggiungi un link a
stablehlo/tests/interpret/<op_mnemonic>.mlir
agli "Esempi" sezione (ad es. Altri esempi). - Assicurati che la specifica abbia un solo esempio.
- Assicurati che l'esempio della specifica rispetti le linee guida per i test.
- Assicurati che il test di esempio di specifica sia interpretabile.
- Assicurati che l'esempio delle specifiche sia lo stesso della documentazione per la risoluzione extragiudiziale delle controversie.
- Aggiungi un link a
In status.md:
- Aggiorna la sezione "Interprete" colonna su
yes
.
- Aggiorna la sezione "Interprete" colonna su