Neste documento, resumimos as diretrizes para implementar e revisar uma op para o intérprete. Incluímos intencionalmente alguns itens de ação auxiliares relacionados ao verificador e à inferência de tipo, com a ideia de avançar nessas frentes junto com a implementação do intérprete.
Ao implementar a operação
- Forneça uma estratégia de teste explicitamente escrita (em uma descrição de PR) semelhante a esta para usar como referência ao revisar os métodos de verificação e inferência de tipo e os testes correspondentes. O revisor vai verificar se a descrição é abrangente.
- Consulte hlo_evaluator para identificar detalhes de implementação complicados e possíveis lacunas de funcionalidade.
- Abra tíquetes para os componentes de software correspondentes se encontrar bugs ou funcionalidades ausentes.
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 fazem referência a rótulos de restrição (por exemplo,
Cn
ouIn
) da especificação no formatoxyz_cn
ouxyz_in
, para a operaçãoXyzOp
, para identificar a correspondência entre as restrições no ODS e a especificação. O exemplo abaixo mostra como adicionar os rótulos de restrição como comentários comTraits
eTypeConstraints
do mlir.xyz_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 como "Verifique as seguintes propriedades: …".
- Adicione comentários que fazem referência a rótulos de restrição (por exemplo,
Cn
ouIn
) da 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.- É possível ter um comentário com vários rótulos de restrição ou
vários comentários com o mesmo rótulo de restrição. Tudo depende de
como as restrições são implementadas. Se houver restrições consecutivas,
condensa-as como
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - Caso haja uma incompatibilidade entre as restrições na implementação em comparação com as na especificação, verifique se há um problema aberto refletindo essa discrepância.
- É possível ter um comentário com vários rótulos de restrição ou
vários comentários com o mesmo rótulo de restrição. Tudo depende de
como as restrições são implementadas. Se houver restrições consecutivas,
condensa-as como
-
- Adicione um arquivo chamado
<op_mnemonic>.mlir
. - Crie testes seguindo as diretrizes de teste.
- Adicione um arquivo chamado
-
- 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 incompatibilidade de precisão, corrija a implementação/o teste.
- Para incompatibilidades de precisão, marque o teste com
RUN-DISABLED(#1278)
, se ainda não tiver feito isso.
-
- Verifique se há pelo menos um teste (positivo ou negativo) para cada restrição nos métodos de verificação e inferência de tipo. As restrições cobertas no ODS não serão testadas. Esses testes serão principalmente negativos, testando se as restrições não são atendidas ou positivos, testando se a forma inferida está correta.
- Confira se todos os testes relacionados à operação em teste foram colocados juntos.
- Verifique se todos os testes relacionados à operação em teste são
precedidos por uma macro
CHECK-LABEL
ativada. - Escolha o nome da função dos testes usando o formato
xyz_cn_im_...
para uma função que testa restriçõesCn
,Im
, etc. para a operaçãoXyzOp
. Quando o formato proposto não se aplicar, mantenha o nome atual. - Depois que a etapa acima for concluída, classifique todos os testes relacionados à opção no teste em ordem alfabética com base no nome da função.
- Continue adicionando testes até que o ccov mostre uma cobertura de >= 90% para a operação.
-
- Verifique se todas as restrições relacionadas aos testes de inferência de forma estão presentes neste arquivo, seguindo as mesmas diretrizes de nomenclatura mencionadas acima.
- Mova todos os testes de inferência de forma do arquivo ops_stablehlo.mlir para este arquivo.
Em spec.md:
- Adicione um link para
stablehlo/tests/interpret/<op_mnemonic>.mlir
à seção "Exemplos" (por exemplo, Mais exemplos). - Verifique se a especificação tem apenas um exemplo.
- Confira se o exemplo de especificação segue as diretrizes de teste.
- Verifique se o teste de exemplo de especificação pode ser interpretado.
- Verifique se o exemplo de especificação é o mesmo do ODS.
- Adicione um link para
Em status.md:
- Atualize a coluna "Intérprete" para
yes
.
- Atualize a coluna "Intérprete" para