Dans ce document, nous récapitulons les consignes d'implémentation et d'examen d'une opération pour l'interprète. Nous avons intentionnellement inclus quelques éléments d'action auxiliaires liés à l'outil de vérification et à l'inférence de type, dans l'idée de progresser sur ces fronts parallèlement à l'implémentation de l'interpréteur.
Lors de l'implémentation de l'opération
- Fournissez une stratégie de test écrite explicitement (dans la description d'une demande de publication) semblable à celle-ci à utiliser comme référence lors de l'examen des méthodes de vérification et d'inférence de type, ainsi que des tests correspondants. L'examinateur vérifiera que la description est complète.
- Consultez hlo_evaluator pour identifier les détails délicats de l'implémentation et les éventuelles lacunes dans les fonctionnalités.
- Si vous détectez des bugs ou des fonctionnalités manquantes, créez des demandes pour les composants logiciels correspondants.
Après avoir implémenté l'opération
Dans StablehloOps.td:
- Assurez-vous que l'
summary
dans l'ODS de l'opération respecte le format standard. (demande associée) Ajoutez des commentaires faisant référence aux libellés de contrainte (par exemple,
Cn
ouIn
) de la spécification au formatxyz_cn
ouxyz_in
, pour l'opérationXyzOp
, afin d'identifier la correspondance entre les contraintes dans l'ODS et la spécification. L'exemple suivant montre comment ajouter les libellés de contrainte en tant que commentaires avec les éléments mlirTraits
etTypeConstraints
. Remarque :xyz_c4
fait référence aux 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 l'
Dans TypeInference.cpp et StablehloOps.cpp:
- Supprimez les commentaires du type "Validez les propriétés suivantes :...".
- Ajoutez des commentaires faisant référence aux étiquettes de contrainte (par exemple,
Cn
ouIn
) à partir de la spécification au formatxyz_cn
ouxyz_in
, pour l'opérationXyzOp
, afin d'identifier les parties des vérificateurs et des fonctions de forme correspondant aux contraintes de la spécification.- Vous pouvez ajouter plusieurs libellés de contrainte à un commentaire ou plusieurs commentaires avec le même libellé de contrainte. Tout dépend de la façon dont les contraintes sont mises en œuvre. Si des contraintes sont consécutives, condensez-les en
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - En cas de non-concordance entre les contraintes de l'implémentation et celles de la spécification, assurez-vous qu'un problème ouvert reflète cette différence.
- Vous pouvez ajouter plusieurs libellés de contrainte à un commentaire ou plusieurs commentaires avec le même libellé de contrainte. Tout dépend de la façon dont les contraintes sont mises en œuvre. Si des contraintes sont consécutives, condensez-les en
Dans les tests de l'interprète :
- Ajoutez un fichier nommé
<op_mnemonic>.mlir
. - Écrivez des tests en suivant les consignes de test.
- Ajoutez un fichier nommé
Dans le répertoire testdata :
- Exécutez tous les tests désactivés couverts par l'opération nouvellement ajoutée.
- 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 l'implémentation/le test.
- En cas de différences de précision, taguez le test avec
RUN-DISABLED(#1278)
(si ce n'est pas déjà fait).
Dans ops_stablehlo.mlir :
- Assurez-vous qu'il existe au moins un test (positif ou négatif) pour chaque contrainte dans les méthodes de vérificateur et d'inférence de type. Les contraintes couvertes par ODS ne seront pas testées. Ces tests seront principalement négatifs, vérifiant que les contraintes ne sont pas respectées, ou positifs, vérifiant que la forme inférée est correcte.
- Assurez-vous que tous les tests liés à l'opération testée sont regroupés.
- Assurez-vous qu'une macro
CHECK-LABEL
lit est ajoutée au début de tous les tests liés à l'opération testée. - Choisissez le nom de fonction des tests à l'aide du format
xyz_cn_im_...
pour une fonction testant les contraintesCn
,Im
, etc. pour l'opérationXyzOp
. Si le format proposé ne s'applique pas, conservez le nom existant. - Une fois l'étape ci-dessus terminée, triez tous les tests liés à l'opération en cours de test par ordre alphabétique en fonction du nom de la fonction.
- Continuez à ajouter des tests jusqu'à ce que la valeur ccov indique une couverture d'au moins 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 du fichier ops_stablehlo.mlir vers ce fichier.
Dans spec.md :
- Ajoutez un lien vers
stablehlo/tests/interpret/<op_mnemonic>.mlir
dans la section "Exemples" (par exemple, Plus d'exemples). - 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 l'exemple de test de spécification est interprétable.
- Assurez-vous que l'exemple de spécification est identique à celui figurant dans l'organisme de règlement de litiges extrajudiciaire.
- Ajoutez un lien vers
Dans status.md:
- Remplacez la colonne "Interpréteur" par
yes
.
- Remplacez la colonne "Interpréteur" par