Checklist des spécifications de StableHLO

Ce document résume les consignes à suivre pour examiner les modifications apportées à la spécification. Pour le moment, ces modifications impliquent généralement la vérification de plusieurs éléments dans plusieurs sources. Ce document les résume donc toutes pour simplifier les examens:

  1. Vérifiez que la colonne "Specification" (Spécification) dans status.md indique "yes" (oui), ajoutez une ligne si vous ajoutez une opération.
  2. Vérifiez si le titre de la section correspond au mnémonique de l'opération dans l'ODS.
  3. Vérifiez si la section "Sémantique" correspond à l'opération sémantique de XLA.
  4. Vérifiez si les sections "Entrées" et "Sorties" :
    1. Indiquez les mêmes éléments que l'ODS.
    2. Affichez les mêmes éléments que HloInstruction::CreateFromProto.
    3. sont commandés exactement comme les ODS ;
    4. En cas d'incohérence, vérifiez qu'il existe des tickets correspondants.
  5. Vérifiez si la section "Contraintes" :
    1. Correspond au fichier shape_inference.cc de XLA.
    2. Correspond au fichier hlo_verifier.cc de XLA.
    3. Correspond à l'ODS.
    4. Correspond à StablehloOps.cpp.
    5. En cas d'incohérence, vérifiez qu'il existe des tickets correspondants. Associez tous ces billets dans la spécification, à des emplacements aussi spécifiques que possible (par exemple, si un ticket concerne une contrainte qui n'a pas été mise en œuvre, associez-le directement dans cette contrainte).
    6. Si les parties correspondantes d'ODS et de StablehloOps.cpp correspondent aux spécifications, vérifiez que les colonnes "Verification" et "Type Inference" (Inférence de type) de status.md indiquent "yes".
  6. Vérifiez si la section "Exemples" :
    1. Ne comporte qu'un seul exemple. (Nous ajouterons bientôt des liens vers d'autres exemples de la suite de tests d'interpréteur StableHLO.)
    2. Utilise une syntaxe MLIR valide en exécutant stablehlo-opt sur les exemples de code.
    3. Utilise une syntaxe MLIR générique, qui peut être obtenue en exécutant stablehlo-opt -mlir-print-op-generic (nous nous en tenons à la syntaxe générique dans la spécification pour éviter d'avoir à modifier la spécification lors des modifications apportées au vérificateur d'imprimante).
  7. Vérifiez que description dans l'ODS de l'opération :
    1. Inclut la première phrase de la spécification.
    2. Ensuite, renvoie vers la section correspondante de la spécification.
    3. Elle utilise ensuite le même exemple que la spécification, mais via une syntaxe élégante que vous pouvez obtenir en exécutant stablehlo-opt.
  8. Vérifiez que les fichiers liés à la mise en œuvre des contraintes de vérification et d'inférence de type respectent les consignes mentionnées ci-dessous :
    1. Suivez la consignes n° 1 pour StablehloOps.td.
    2. Suivez la consigne n° 2 pour TypeInference.cpp et StablehloOps.cpp.
    3. Suivez la consigne n° 5 pour ops_stablehlo.mlir.
    4. Suivez la consigne n° 6 pour infer_stablehlo.mlir.
  9. Évaluez l'opération pour les effets secondaires et la spéculabilité.
    1. Si l'opération n'a pas d'effets secondaires et peut toujours être spéculable, attribuez-lui la caractéristique Pure. Ce cas de figure est rare, car la plupart des opérations autorisent les formes dynamiques, ce qui peut entraîner des incohérences de forme au moment de l'exécution, ce qui constitue un comportement non défini. Certaines opérations peuvent également présenter un comportement indéfini dans d'autres situations. La grande majorité des opérations n'ont pas d'effets secondaires (elles doivent présenter le caractère NoMemoryEffect).
    2. La plupart des opérations correspondent à l'une des caractéristiques HLO_SpeculatableIf*. Si l'opération ne correspond à aucune d'entre elles, attribuez-lui la caractéristique ConditionallySpeculatable et implémentez les méthodes d'interface. Ajoutez des tests à stablehlo/tests/ops_speculatability.mlir pour couvrir la logique de spéculatabilité.