Lista de verificação do intérprete de StableHLO

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

  1. 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.
  2. Consultoria hlo_evaluator para identificar detalhes complicados de implementação e possíveis lacunas de funcionalidade.
  3. Registre tíquetes para os componentes de software correspondentes se você encontrar bugs ou a funcionalidade ausente.

Depois de implementar a operação

  1. Em StablehloOps.td:

    1. Verifique se o summary no ODS da operação segue o formato padrão. (ingresso relacionado)
    2. Adicione comentários que façam referência a rótulos de restrição (por exemplo, Cn ou In) do especificação no formato xyz_cn ou xyz_in, para a operação XyzOp, 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 MLir Traits e TypeConstraints. O xyz_c4 se refere a restrições definidas na classe StableHLO_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*/
            ....
         );
      );
      
  2. Em TypeInference.cpp e StablehloOps.cpp:

    1. Exclua comentários com frases como "Verifique as seguintes propriedades: ...".
    2. Adicione comentários que façam referência a rótulos de restrição (por exemplo, Cn ou In) do especificação no formato xyz_cn ou xyz_in, para a operação XyzOp, para identificar quais partes dos verificadores e funções de forma correspondem a quais restrições na especificação.
      1. 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.
      2. 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.
  3. Em testes de intérprete:

    1. Adicione um arquivo com o nome <op_mnemonic>.mlir.
    2. Crie testes seguindo as diretrizes de teste.
  4. No diretório testdata:

    1. Execute todos os testes desativados que são cobertos pela operação recém-adicionada.
    2. Se os testes forem aprovados, ative-os convertendo RUN-DISABLED em RUN.
    3. Se um teste falhar por algum motivo que não seja incompatibilidades de precisão, corrija o implementação/teste.
    4. Para incompatibilidades de precisão, marque o teste com RUN-DISABLED(#1278) (se isso ainda não foi feito).
  5. Em ops_stablehlo.mlir:

    1. 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.
    2. Confira se todos os testes relacionados à operação em teste foram colocados juntas.
    3. Confira se todos os testes relacionados à operação em teste estão precedido por uma macro lit CHECK-LABEL.
    4. Escolha o nome da função dos testes usando o formato xyz_cn_im_... para uma função que testa as restrições Cn, Im, etc. para a operação XyzOp. Nos casos em que o formato proposto não apply, mantenha o nome existente.
    5. Quando a etapa acima for concluída, classifique todos os testes relacionados à operação. em teste alfabeticamente com base no nome da função.
    6. Continue adicionando testes até que o ccov exibe 90% ou mais de cobertura para a operação.
  6. Em infer_stablehlo.mlir:

    1. 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.
    2. Mover todos os testes de inferência de forma do ops_stablehlo.mlir neste arquivo.
  7. Em spec.md:

    1. Adicionar um link para stablehlo/tests/interpret/<op_mnemonic>.mlir aos "Exemplos", seção como Mais exemplos.
    2. A especificação precisa ter apenas um exemplo.
    3. Confira se o exemplo de especificações segue as diretrizes de teste.
    4. Garantir que o teste do exemplo de especificação seja interpretável.
    5. Verifique se o exemplo de especificação é o mesmo do ODS.
  8. Em status.md:

    1. Atualizar o "Intérprete" para yes.