Elenco di controllo della specifica StableHLO

In questo documento, riepiloghiamo le linee guida per esaminare le modifiche alla specifica. Al momento, queste modifiche in genere comportano la verifica di più cose da più fonti, quindi questo documento le riassume tutte per semplificare le revisioni:

  1. Verifica che la colonna "Specifica" in status.md indichi "yes". Aggiungi una riga se aggiungi una nuova operazione.
  2. Controlla se il titolo della sezione corrisponde alla mnemonica dell'operazione nell'ODS.
  3. Controlla se la sezione "Semantica" corrisponde alla Semantica dell'operazione di XLA.
  4. Verifica se le sezioni "Input" e "Output":
    1. Elenca le stesse voci dell'ODS.
    2. Elenca gli stessi elementi di HloInstruction::CreateFromProto.
    3. Vengono ordinate esattamente come gli ODS.
    4. In caso di mancate corrispondenze, verifica che siano presenti ticket corrispondenti.
  5. Controlla se la sezione "Vincoli":
    1. Corrisponde a shape_inference.cc di XLA.
    2. Corrisponde a hlo_verifier.cc di XLA.
    3. Corrisponde all'OTS.
    4. Corrisponde a StablehloOps.cpp.
    5. In caso di mancate corrispondenze, verifica che siano presenti ticket corrispondenti. Collega tutti i ticket nelle specifiche, in posizioni il più specifiche possibile (ad esempio, se un ticket riguarda un vincolo che non è stato implementato, collegalo direttamente in quel vincolo).
    6. Se le parti corrispondenti di ODS e StablehloOps.cpp corrispondono alle specifiche, controlla che le colonne "Verifica" e "Tipo di inferenza" in status.md riportino "sì".
  6. Verifica che la sezione "Esempi":
    1. Ha solo un esempio. In futuro, collegheremo ad altri esempi della suite di test per interpreti StableHLO.
    2. Utilizza una sintassi MLIR valida eseguendo stablehlo-opt su esempi di codice.
    3. Utilizza una sintassi MLIR generica che può essere ottenuta eseguendo stablehlo-opt -mlir-print-op-generic (ci atteniamo a una sintassi generica nelle specifiche per evitare di dover modificare la specifica in caso di modifiche di piuttostoprinter).
  7. Verifica che il description nell'ODS dell'operazione:
    1. Include la prima frase della specifica.
    2. Quindi si collega alla sezione corrispondente delle specifiche.
    3. Quindi utilizza lo stesso esempio della specifica, ma tramite una sintassi piuttosto semplice, che può essere ottenuta eseguendo stablehlo-opt.
  8. Controlla che i file relativi all'implementazione dei vincoli di verifica e di inferenza dei tipi siano conformi alle linee guida riportate di seguito:
    1. Segui la linea guida #1 per StablehloOps.td.
    2. Segui la linea guida #2 per TypeInference.cpp e StablehloOps.cpp.
    3. Segui la linea guida #5 per ops_stablehlo.mlir.
    4. Segui la linea guida #6 per infer_stablehlo.mlir.
  9. Valuta l'operatività per effetti collaterali e speculabilità.
    1. Se l'operazione non ha effetti collaterali ed è sempre speculabile, assegna il trait Pure. Ciò è raro, poiché la maggior parte delle operazioni consente forme dinamiche, che possono portare a errate corrispondenze di forma in fase di runtime, che è un comportamento non definito. Alcune operazioni possono avere un comportamento indefinito anche in altre situazioni. La maggior parte delle operazioni non ha effetti collaterali (dovrebbe avere il tratto NoMemoryEffect).
    2. La maggior parte delle operazioni rientra in uno dei trait HLO_SpeculatableIf*. Se l'operazione non rientra in nessuno di questi, assegna il trait ConditionallySpeculatable e implementa i metodi dell'interfaccia. Aggiungi test a stablehlo/tests/ops_speculatability.mlir per coprire la logica di speculabilità.