En este documento, resumimos los lineamientos para revisar los cambios en la especificación. Por el momento, estos cambios suelen implicar verificar varios elementos en varias fuentes, por lo que en este documento se resumen todos para simplificar las revisiones:
- Verifica que la columna “Specification” en status.md diga “yes” y, si agregas una nueva op, agrega una fila.
- Verifica si el título de la sección coincide con el valor mnemotécnico de la operación en la ODS.
- Verifica si la sección "Semántica" coincide con la Semántica de operaciones de XLA.
- Verifica si las secciones "Entradas" y "Salidas" tienen las siguientes características:
- Enumera los mismos elementos que la ODS.
- Enumera los mismos elementos que HloInstruction::CreateFromProto.
- Se ordenan exactamente como las ODS.
- Si hay alguna discrepancia, verifica que haya tickets correspondientes.
- Verifica si la sección "Restricciones" hace lo siguiente:
- Coincide con shape_inference.cc de XLA.
- Coincide con hlo_verifier.cc de XLA.
- Coincide con la ODS.
- Coincide con StablehloOps.cpp.
- Si hay alguna discrepancia, verifica que haya tickets correspondientes. Vincula todos los tickets en la especificación, en ubicaciones que sean lo más específicas posible (p.ej., si un ticket se trata de una restricción que no se implementó, vincula el ticket directamente en esa restricción).
- Si las partes correspondientes de ODS y StablehloOps.cpp coinciden con la especificación, comprueba que las columnas "Verificación" y "Inferencia de tipo" de status.md digan "sí".
- Verifica si la sección "Ejemplos" hace lo siguiente:
- Solo hay un ejemplo. (En el futuro, ofreceremos vínculos con más ejemplos del paquete de pruebas de intérprete StableHLO).
- Usa una sintaxis de MLIR válida mediante la ejecución de
stablehlo-opt
en los ejemplos de código. - Usa la sintaxis genérica de MLIR que se puede obtener mediante la ejecución de
stablehlo-opt -mlir-print-op-generic
(nos mantenemos la sintaxis genérica en la especificación para evitar tener que cambiar la especificación de los cambios de Prettyprint).
- Verifica que
description
en el ODS de la operación cumpla con estos requisitos:- Incluye la primera oración de la especificación.
- Luego, establece un vínculo a la sección correspondiente de la especificación.
- Luego, usa el mismo ejemplo que la especificación, pero con una sintaxis "bonita", que se puede obtener ejecutando
stablehlo-opt
.
- Comprueba que los archivos relacionados con la implementación de restricciones de inferencia de tipo y verificación sigan los lineamientos que se mencionan a continuación:
- Sigue el lineamiento n.o 1 para StablehloOps.td.
- Sigue el lineamiento n.o 2 para TypeInference.cpp y StablehloOps.cpp.
- Sigue el lineamiento n.o 5 para ops_stablehlo.mlir.
- Sigue el lineamiento n.o 6 para infer_stablehlo.mlir.
- Evalúa la operación en busca de efectos secundarios y especulación.
- Si la op no tiene efectos secundarios y siempre se puede especular, asígnale la característica
Pure
. Esto es poco frecuente, ya que la mayoría de las operaciones permiten formas dinámicas, lo que puede generar discrepancias de formas durante el tiempo de ejecución, lo que es un comportamiento indefinido. Algunas operaciones también pueden tener un comportamiento indefinido en otras situaciones. La gran mayoría de las operaciones no tienen efectos secundarios (deben tener la característicaNoMemoryEffect
). - La mayoría de las operaciones se encuentran en una de las características
HLO_SpeculatableIf*
. Si la op no encaja en ninguno de esos elementos, asígnale la característicaConditionallySpeculatable
e implementa los métodos de la interfaz. Agrega pruebas astablehlo/tests/ops_speculatability.mlir
para cubrir la lógica de especulabilidad.
- Si la op no tiene efectos secundarios y siempre se puede especular, asígnale la característica