En este documento, resumimos los lineamientos para implementar y revisar un op para el intérprete. Incluimos intencionalmente algunas acciones auxiliares elementos relacionados con el verificador y la inferencia de tipo, con la idea de progresar en esos aspectos junto con la implementación de intérpretes.
Durante la implementación de la op
- Proporcionar una estrategia de prueba escrita explícitamente (en una descripción de RR.PP.) similares a esto para usar como referencia mientras revisas la verificación y la inferencia de tipo métodos y las pruebas correspondientes. El revisor comprobará descripción completa.
- Consulta hlo_evaluator para identificar detalles de implementación engañosos y posibles brechas en la funcionalidad.
- Envía tickets para los componentes de software correspondientes si encuentras errores o funciones faltantes.
Después de implementar la op
En StablehloOps.td:
- Asegúrate de que
summary
en el ODS de la operación siga el formato estándar. (entrada relacionada) Agrega comentarios que hagan referencia a etiquetas de restricciones (p.ej.,
Cn
oIn
) de la en el formatoxyz_cn
oxyz_in
, para la opXyzOp
, con el objetivo de identificar y la correspondencia entre las restricciones de ODS y la especificación. El El siguiente ejemplo muestra cómo agregar las etiquetas de restricción como comentarios. junto con los archivosTraits
yTypeConstraints
. Nota quexyz_c4
hace referencia a definidas en la claseStableHLO_FooOp
(p.ej.,StableHLO_ShapedInterfaceOp
,StableHLO_UnaryElementwiseOp
StableHLO_Op
, etcétera).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*/ .... ); );
- Asegúrate de que
En TypeInference.cpp y StablehloOps.cpp:
- Borra comentarios que digan cosas como “Verifica las siguientes propiedades: ...
- Agrega comentarios que hagan referencia a etiquetas de restricciones (p.ej.,
Cn
oIn
) de la en el formatoxyz_cn
oxyz_in
, para la opXyzOp
, para identificar qué partes de los verificadores y las funciones de forma corresponden a cuáles restricciones en la especificación.- Está bien tener un comentario con varias etiquetas de restricción o tener
varios comentarios con la misma etiqueta de restricción. Todo depende de
cómo se implementan las restricciones. Si hay restricciones consecutivas,
condensarlos como
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - En caso de que haya una discrepancia entre las restricciones implementación y los de la especificación, asegúrate de que un problema abierto que refleje esa discrepancia.
- Está bien tener un comentario con varias etiquetas de restricción o tener
varios comentarios con la misma etiqueta de restricción. Todo depende de
cómo se implementan las restricciones. Si hay restricciones consecutivas,
condensarlos como
En las pruebas de intérprete:
- Agrega un archivo llamado
<op_mnemonic>.mlir
. - Escribe pruebas de acuerdo con los lineamientos para realizar pruebas.
- Agrega un archivo llamado
En el directorio de datos de prueba:
- Ejecuta las pruebas inhabilitadas que estén cubiertas por la operación agregada recientemente.
- Si las pruebas son exitosas, habilítalas convirtiendo
RUN-DISABLED
enRUN
. - Si una prueba falla por algún motivo que no sean las faltas de coincidencia de precisión, corrige el error implementación y prueba.
- Para las discrepancias de precisión, etiqueta la prueba con
RUN-DISABLED(#1278)
(si aún no está hecho).
-
- Asegúrate de que haya al menos una prueba (positiva o negativa) para cada una Restricción en los métodos de inferencia de tipo y verificador; restricciones cubiertos en la ODS no se evaluarán. La mayoría de las pruebas serán negativas, prueba que las restricciones no se cumplen o son positivas, lo que prueba que la forma inferida es correcta.
- Asegúrate de realizar todas las pruebas relacionadas con la operación a prueba. entre sí.
- Asegúrate de que todas las pruebas relacionadas con la operación a prueba
precedido por una macro iluminada
CHECK-LABEL
. - Elige el nombre de la función de las pruebas con el siguiente formato:
xyz_cn_im_...
para las restricciones de prueba de funcionesCn
,Im
, etc. para la opXyzOp
. En los casos en que el formato propuesto no cumpla apply, conserva el nombre existente. - Cuando completes el paso anterior, ordena todas las pruebas relacionadas con la operación. se somete a prueba alfabéticamente según el nombre de la función.
- Seguir agregando pruebas hasta que aparezca ccov muestra una cobertura de más del 90% para la operación.
-
- Asegúrate de que estén presentes todas las restricciones relacionadas con las pruebas de inferencia de forma de este archivo, siguiendo las mismas pautas de nomenclatura mencionadas anteriormente.
- Mover las pruebas de inferencia de forma desde ops_stablehlo.mlir en este archivo.
En spec.md:
- Agregar un vínculo a
stablehlo/tests/interpret/<op_mnemonic>.mlir
a la sección "Ejemplos" sección (p.ej., Más ejemplos). - Asegúrate de que la especificación tenga solo 1 ejemplo.
- Asegúrate de que el ejemplo de especificaciones cumpla con los lineamientos de pruebas.
- Asegúrate de que la prueba de ejemplo de especificaciones se pueda interpretar.
- Asegúrate de que el ejemplo de la especificación sea el mismo que el de la ODS.
- Agregar un vínculo a
En status.md:
- Cómo actualizar el "Intérprete" columna a
yes
.
- Cómo actualizar el "Intérprete" columna a