Neste documento, resumimos as diretrizes para implementar e revisar uma para o intérprete. Incluímos intencionalmente algumas ações auxiliares itens relacionados ao verificador e à inferência de tipo, com a ideia de avançar nessas frentes, ao lado da implementação do intérprete.
Ao implementar a operação
- Forneça uma estratégia de teste explicitamente escrita (em uma descrição de RP) semelhantes a este para usar como referência ao revisar a verificação e a inferência de tipo e os testes correspondentes. O revisor vai verificar se o é abrangente.
- Consultoria hlo_evaluator para identificar detalhes complicados de implementação e possíveis lacunas de funcionalidade.
- Registre tíquetes para os componentes de software correspondentes se você encontrar bugs ou a funcionalidade ausente.
Depois de implementar a operação
Em StablehloOps.td:
- Verifique se o
summary
no ODS da operação segue o formato padrão. (ingresso relacionado) Adicione comentários que façam referência a rótulos de restrição (por exemplo,
Cn
ouIn
) do especificação no formatoxyz_cn
ouxyz_in
, para a operaçãoXyzOp
, para identificar o a correspondência entre as restrições no ODS e a especificação. A o exemplo abaixo mostra como adicionar os rótulos de restrição como comentários junto com o MLirTraits
eTypeConstraints
. Oxyz_c4
se refere a restrições definidas na classeStableHLO_FooOp
(por exemplo,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*/ .... ); );
- Verifique se o
Em TypeInference.cpp e StablehloOps.cpp:
- Exclua comentários com frases como "Verifique as seguintes propriedades: ...".
- Adicione comentários que façam referência a rótulos de restrição (por exemplo,
Cn
ouIn
) do especificação no formatoxyz_cn
ouxyz_in
, para a operaçãoXyzOp
, para identificar quais partes dos verificadores e funções de forma correspondem a quais restrições na especificação.- Não há problema em ter um comentário com vários rótulos de restrição
vários comentários com o mesmo rótulo de restrição. Tudo depende
como as restrições são implementadas. Se houver restrições consecutivas,
condensem-as como
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - Caso haja uma incompatibilidade entre as restrições em relação à implementação e aos que estão na especificação, um problema em aberto que reflita essa discrepância.
- Não há problema em ter um comentário com vários rótulos de restrição
vários comentários com o mesmo rótulo de restrição. Tudo depende
como as restrições são implementadas. Se houver restrições consecutivas,
condensem-as como
-
- Adicione um arquivo com o nome
<op_mnemonic>.mlir
. - Crie testes seguindo as diretrizes de teste.
- Adicione um arquivo com o nome
-
- Execute todos os testes desativados que são cobertos pela operação recém-adicionada.
- Se os testes forem aprovados, ative-os convertendo
RUN-DISABLED
emRUN
. - Se um teste falhar por algum motivo que não seja incompatibilidades de precisão, corrija o implementação/teste.
- Para incompatibilidades de precisão, marque o teste com
RUN-DISABLED(#1278)
(se isso ainda não foi feito).
-
- Certifique-se de que há pelo menos um teste (positivo ou negativo) para cada restrição nos métodos de inferência de tipo e verificador; restrições cobertos pelo cartório não serão testados. A maioria dos testes será negativa, testar se as restrições não foram atendidas ou positivas, testar se o a forma inferida está correta.
- Confira se todos os testes relacionados à operação em teste foram colocados juntas.
- Confira se todos os testes relacionados à operação em teste estão
precedido por uma macro lit
CHECK-LABEL
. - Escolha o nome da função dos testes usando o formato
xyz_cn_im_...
para uma função que testa as restriçõesCn
,Im
, etc. para a operaçãoXyzOp
. Nos casos em que o formato proposto não apply, mantenha o nome existente. - Quando a etapa acima for concluída, classifique todos os testes relacionados à operação. em teste alfabeticamente com base no nome da função.
- Continue adicionando testes até que o ccov exibe 90% ou mais de cobertura para a operação.
-
- Verifique se todas as restrições relacionadas aos testes de inferência de formas estão presentes neste arquivo, seguindo as mesmas diretrizes de nomenclatura observadas acima.
- Mover todos os testes de inferência de forma do ops_stablehlo.mlir neste arquivo.
Em spec.md:
- Adicionar um link para
stablehlo/tests/interpret/<op_mnemonic>.mlir
aos "Exemplos", seção como Mais exemplos. - A especificação precisa ter apenas um exemplo.
- Confira se o exemplo de especificações segue as diretrizes de teste.
- Garantir que o teste do exemplo de especificação seja interpretável.
- Verifique se o exemplo de especificação é o mesmo do ODS.
- Adicionar um link para
Em status.md:
- Atualizar o "Intérprete" para
yes
.
- Atualizar o "Intérprete" para