Elenco di controllo per l'interprete StableHLO

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

  1. 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.
  2. Consulenza hlo_evaluator al fine di identificare dettagli di implementazione complicati e potenziali lacune nelle funzionalità.
  3. Se rilevi bug, invia i ticket per i componenti software corrispondenti o mancanza di funzionalità.

Dopo aver implementato l'operazione

  1. In StablehloOps.td:

    1. Assicurati che il valore summary nella notifica di risoluzione extragiudiziale delle controversie dell'operazione segua il formato standard. (biglietto correlato)
    2. Aggiungi commenti che fanno riferimento alle etichette del vincolo (ad es. Cn o In) dall'elenco nel formato xyz_cn o xyz_in, per l'operazione XyzOp, 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 MLR Traits e TypeConstraints. Nota: xyz_c4 si riferisce a vincoli definiti nella classe StableHLO_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*/
            ....
         );
      );
      
  2. Nel file TypeInference.cpp e StablehloOps.cpp:

    1. Elimina i commenti che contengono frasi del tipo "Verifica le seguenti proprietà: ...".
    2. Aggiungi commenti che fanno riferimento alle etichette del vincolo (ad es. Cn o In) dall'elenco nel formato xyz_cn o xyz_in, per l'operazione XyzOp, per identificare a quali parti dei verificatori e funzioni di forma corrispondono i vincoli nella specifica.
      1. È 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.
      2. 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.
  3. Nei test degli interpreti:

    1. Aggiungi un file denominato <op_mnemonic>.mlir.
    2. Scrivi test seguendo le linee guida per i test.
  4. Nella directory testdata:

    1. Esegui tutti i test disattivati coperti dall'operazione appena aggiunta.
    2. Se i test hanno esito positivo, abilitali convertendo RUN-DISABLED in RUN.
    3. Se un test non va a buon fine per qualche motivo diverso dalla mancata corrispondenza della precisione, correggi il implementazione/test.
    4. Per le mancate corrispondenze nella precisione, tagga il test con RUN-DISABLED(#1278) (se non l'hai già fatto).
  5. In ops_stablehlo.mlir:

    1. 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.
    2. Assicurati che tutti i test relativi all'operazione in corso vengano eseguiti in sinergia.
    3. Accertati che tutti i test relativi all'operazione in fase di test siano preceduta da una macro accesa CHECK-LABEL.
    4. Scegli il nome della funzione dei test utilizzando il formato xyz_cn_im_... per una funzione di test dei vincoli Cn, Im, e così via per l'operazione XyzOp. Nei casi in cui il formato proposto non applica, mantieni il nome esistente.
    5. 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.
    6. Continua ad aggiungere test fino al ccov mostra una copertura >= 90% per l'operazione.
  6. In infer_stablehlo.mlir:

    1. 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.
    2. Sposta tutti i test di inferenza delle forme da ops_stablehlo.mlir in questo file.
  7. In spec.md:

    1. Aggiungi un link a stablehlo/tests/interpret/<op_mnemonic>.mlir agli "Esempi" sezione (ad es. Altri esempi).
    2. Assicurati che la specifica abbia un solo esempio.
    3. Assicurati che l'esempio della specifica rispetti le linee guida per i test.
    4. Assicurati che il test di esempio di specifica sia interpretabile.
    5. Assicurati che l'esempio delle specifiche sia lo stesso della documentazione per la risoluzione extragiudiziale delle controversie.
  8. In status.md:

    1. Aggiorna la sezione "Interprete" colonna su yes.