Dans ce document, nous récapitulons les consignes d'implémentation et d'examen d'un pour l'interpréteur. Nous avons intentionnellement inclus quelques actions auxiliaires des éléments liés à l'outil de vérification et à l'inférence de type, avec l'idée de progresser avec l'implémentation de l'interpréteur.
Lors de l'implémentation de l'opération
- Fournir une stratégie de test écrite de manière explicite (dans une description de relations publiques) similaire à ceci pour utiliser comme référence lors de l'examen de la vérification et de l'inférence de type ; les méthodes et les tests correspondants. L'examinateur vérifiera la description est complète.
- Consulter hlo_evaluator pour identifier les détails complexes de l'implémentation et les fonctionnalités manquantes.
- Si vous constatez des bugs, envoyez des demandes d'assistance pour les composants logiciels correspondants. ou des fonctionnalités manquantes.
Après avoir implémenté l'opération
Dans StablehloOps.td:
- Assurez-vous que le
summary
dans l'ODS de l'opération respecte le format standard. (billet associé) Ajoutez des commentaires référençant les étiquettes de contrainte (par exemple,
Cn
ouIn
) à partir de au formatxyz_cn
ouxyz_in
, pour l'opérationXyzOp
, afin d'identifier correspondance entre les contraintes dans ODS et la spécification. La L'exemple suivant montre comment ajouter les étiquettes de contrainte en tant que commentaires avec mlirTraits
etTypeConstraints
. Notez quexyz_c4
fait référence à contraintes définies dans la classeStableHLO_FooOp
(par exemple,StableHLO_ShapedInterfaceOp
,StableHLO_UnaryElementwiseOp
StableHLO_Op
, etc.).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*/ .... ); );
- Assurez-vous que le
Dans TypeInference.cpp et StablehloOps.cpp:
- Supprimez les commentaires du type "Faites valider les propriétés suivantes: ..."
- Ajoutez des commentaires référençant les étiquettes de contrainte (par exemple,
Cn
ouIn
) à partir de au formatxyz_cn
ouxyz_in
, pour l'opérationXyzOp
, afin d'identifier à quelles parties des vérificateurs et aux fonctions de forme correspondent dans la spécification.- Il est possible d'avoir un commentaire avec plusieurs libellés de contrainte ou d'avoir
plusieurs commentaires avec le même libellé de contrainte. Tout dépend de
comment les contraintes sont implémentées. S'il existe des contraintes consécutives,
les condenser en tant que
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - En cas de non-concordance entre les contraintes et ceux de la spécification, assurez-vous qu'il existe un problème ouvert reflétant cet écart.
- Il est possible d'avoir un commentaire avec plusieurs libellés de contrainte ou d'avoir
plusieurs commentaires avec le même libellé de contrainte. Tout dépend de
comment les contraintes sont implémentées. S'il existe des contraintes consécutives,
les condenser en tant que
Dans les tests d'interpréteur:
- Ajoutez un fichier nommé
<op_mnemonic>.mlir
. - Rédigez des tests en suivant les consignes relatives aux tests.
- Ajoutez un fichier nommé
Dans le répertoire testdata:
- Exécutez tous les tests désactivés couverts par la nouvelle opération.
- Si les tests réussissent, activez-les en convertissant
RUN-DISABLED
enRUN
. - Si un test échoue pour une raison autre qu'une incohérence de précision, corrigez le problème la mise en œuvre et le test.
- En cas d'incohérence de précision, ajoutez le tag
RUN-DISABLED(#1278)
au test (si ce n'est pas déjà fait).
Dans ops_stablehlo.mlir:
- Assurez-vous qu'il y a au moins un test (positif ou négatif) pour chaque une contrainte dans les méthodes de vérificateur et d'inférence de type ; de contraintes couvertes par l’ODS ne seront pas testées. Ces tests seront le plus souvent négatifs, en testant que les contraintes ne sont pas respectées ou positives, en testant que la forme déduite est correcte.
- Assurez-vous que tous les tests liés à l'opération testée sont placés ensemble.
- Assurez-vous que tous les tests liés à l'opération testée sont
précédé d'une macro éclairée par
CHECK-LABEL
. - Choisissez le nom de la fonction des tests en utilisant le format
xyz_cn_im_...
pour une fonction testant les contraintesCn
,Im
, etc. pour l'opérationXyzOp
. Si le format proposé ne convient pas appliquez, conservez le nom existant. - Une fois l'étape ci-dessus terminée, triez tous les tests liés à l'opération. sont testés par ordre alphabétique en fonction du nom de la fonction.
- Continuez à ajouter des tests jusqu'à ce que la mention ccov présente une couverture supérieure ou égale à 90% pour l'opération.
Dans infer_stablehlo.mlir:
- Assurez-vous que toutes les contraintes liées aux tests d'inférence de forme sont présentes dans ce fichier, en suivant les mêmes consignes de dénomination que celles mentionnées ci-dessus.
- Déplacez tous les tests d'inférence de forme depuis ops_stablehlo.mlir. dans ce fichier.
Dans spec.md:
- Ajouter un lien vers
stablehlo/tests/interpret/<op_mnemonic>.mlir
aux "Exemples" section (Autres exemples, par exemple). - Assurez-vous que la spécification ne contient qu'un seul exemple.
- Assurez-vous que l'exemple de spécification respecte les consignes de test.
- Assurez-vous que le test de l'exemple de spécification est interprétable.
- Assurez-vous que l'exemple de spécification est identique à celui indiqué dans l'organisme de règlement de litiges extrajudiciaire.
- Ajouter un lien vers
Dans status.md:
- Mettre à jour l'option "Interprète" la colonne à
yes
.
- Mettre à jour l'option "Interprète" la colonne à