Neste documento, resumimos as diretrizes para analisar mudanças na especificação. No momento, essas mudanças geralmente envolvem a verificação de vários itens em fontes diferentes. Por isso, este documento resume todas elas para simplificar as análises:
- Verifique se a coluna "Specification" em status.md diz "yes". Se estiver adicionando uma nova op, adicione uma linha.
- Verifique se o título da seção corresponde à linguagem mnemônica da operação na ODS.
- Verifique se a seção "Semântica" corresponde à Semântica de operação do XLA.
- Verifique se as seções "Entradas" e "Saídas":
- Liste os mesmos itens do ODS.
- Liste os mesmos itens como HloInstruction::CreateFromProto.
- São ordenadas exatamente como ODS.
- Se houver inconsistências, verifique se há tíquetes correspondentes.
- Verifique se a seção "Restrições":
- Corresponde a shape_inference.cc do XLA.
- Corresponde ao hlo_verifier.cc do XLA.
- Corresponde à ODS.
- Corresponde a StablehloOps.cpp.
- Se houver inconsistências, verifique se há tíquetes correspondentes. Vincule todos os ingressos na especificação em locais o mais específicos possível (por exemplo, se um tíquete for sobre uma restrição que não foi implementada, vincule o ingresso diretamente nessa restrição).
- Se as partes correspondentes de ODS e StablehloOps.cpp corresponderem à especificação, confira se as colunas "Verificação" e "Inferência de tipo" em status.md mostram "sim".
- Confira se a seção "Exemplos":
- Tem apenas um exemplo. No futuro, incluiremos links para mais exemplos do pacote de testes de intérprete do StableHLO.
- usa uma sintaxe MLIR válida executando
stablehlo-opt
em exemplos de código; - Usa uma sintaxe MLIR genérica, que pode ser recebida executando
stablehlo-opt -mlir-print-op-generic
. Mantemos a sintaxe genérica na especificação para evitar que ela seja alterada em mudanças no prettyprinter.
- Verifique se o
description
no ODS da operação:- Inclui a primeira frase da especificação.
- Em seguida, leva à seção correspondente da especificação.
- Em seguida, usa o mesmo exemplo da especificação, mas usando uma sintaxe bela que pode
ser recebida executando
stablehlo-opt
.
- Confira se os arquivos relacionados à implementação de restrições de verificação e
inferência de tipo seguem as diretrizes mencionadas abaixo:
- Siga a diretriz no 1 para StablehloOps.td.
- Siga a diretriz 2 para TypeInference.cpp e StablehloOps.cpp.
- Siga a diretriz 5 para ops_stablehlo.mlir.
- Siga a diretriz no 6 para infer_stablehlo.mlir.
- Avalie a operação em relação a efeitos colaterais e especulabilidade.
- Se a operação não tiver efeitos colaterais e for sempre especulável, atribua a ela a característica
Pure
. Isso é raro, já que a maioria das operações permite formas dinâmicas, o que pode levar a incompatibilidades de formas no tempo de execução, que é um comportamento indefinido. Algumas operações também podem ter comportamento indefinido em outras situações. A grande maioria das operações não tem efeitos colaterais, e sim a característicaNoMemoryEffect
. - A maioria das operações se enquadra em uma das características
HLO_SpeculatableIf*
. Se a operação não se encaixar em nenhum deles, atribua a ela a característicaConditionallySpeculatable
e implemente os métodos de interface. Adicione testes astablehlo/tests/ops_speculatability.mlir
para abranger a lógica de especulação.
- Se a operação não tiver efeitos colaterais e for sempre especulável, atribua a ela a característica