В этом документе мы суммируем рекомендации по реализации и проверке функций переводчика. Мы намеренно включили несколько вспомогательных действий, связанных с верификатором и выводом типа, с целью добиться прогресса на этих фронтах параллельно с реализацией интерпретатора.
При реализации оп.
- Предоставьте явно написанную стратегию тестирования (в описании PR), подобную этой , чтобы использовать ее в качестве справочного материала при рассмотрении методов проверки и вывода типа, а также соответствующих тестов. Рецензент дважды проверит полноту описания.
- Обратитесь к hlo_evaluator , чтобы выявить сложные детали реализации и потенциальные пробелы в функциональности.
- Сохраняйте билеты для соответствующих компонентов программного обеспечения, если вы обнаружите какие-либо ошибки или недостающую функциональность.
После реализации оп.
В StablehloOps.td :
- Убедитесь, что
summary
в ODS операции соответствует стандартному формату. (сопутствующий билет ) Добавьте комментарии, ссылающиеся на метки ограничений (например,
Cn
илиIn
) из спецификации в форматеxyz_cn
илиxyz_in
для opXyzOp
, чтобы определить соответствие между ограничениями в ODS и спецификацией. В следующем примере показано, как добавить метки ограничений в качестве комментариев рядом с mlirTraits
иTypeConstraints
. Примечание.xyz_c4
относится к ограничениям, определенным в классеStableHLO_FooOp
(например,StableHLO_ShapedInterfaceOp
,StableHLO_UnaryElementwiseOp
,StableHLO_Op
и т. д.).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*/ .... ); );
- Убедитесь, что
В TypeInference.cpp и StablehloOps.cpp :
- Удалите комментарии, в которых говорится что-то вроде «Проверьте следующие свойства: ...».
- Добавьте комментарии, ссылающиеся на метки ограничений (например,
Cn
илиIn
) из спецификации в форматеxyz_cn
илиxyz_in
для opXyzOp
, чтобы определить, какие части верификаторов и функций формы соответствуют каким ограничениям в спецификации.- Вполне нормально иметь комментарий с несколькими метками ограничений или иметь несколько комментариев с одной и той же меткой ограничения. Все зависит от того, как будут реализованы ограничения. Если существуют последовательные ограничения, сократите их как
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - В случае несоответствия ограничений в реализации VS и ограничениях в спецификации убедитесь, что существует открытая проблема, отражающая это несоответствие.
- Вполне нормально иметь комментарий с несколькими метками ограничений или иметь несколько комментариев с одной и той же меткой ограничения. Все зависит от того, как будут реализованы ограничения. Если существуют последовательные ограничения, сократите их как
- Добавьте файл с именем
<op_mnemonic>.mlir
. - Пишите тесты, следуя рекомендациям по тестированию .
- Добавьте файл с именем
- Запустите все отключенные тесты, на которые распространяется новая добавленная операция.
- Если тесты пройдены, включите их, преобразовав
RUN-DISABLED
вRUN
. - Если тест не пройден по какой-либо причине, кроме несоответствия точности, исправьте реализацию/тест.
- В случае несоответствия точности пометьте тест меткой
RUN-DISABLED(#1278)
(если это еще не сделано).
- Убедитесь, что существует хотя бы один тест (положительный или отрицательный) для каждого ограничения в методах проверки и вывода типа; ограничения, охватываемые ODS, не будут проверяться. Эти тесты в основном будут отрицательными, проверяющими несоблюдение ограничений, или положительными, проверяющими правильность предполагаемой формы.
- Убедитесь, что все тесты, относящиеся к тестируемой операции, собраны вместе.
- Убедитесь, что все тесты, относящиеся к тестируемой операции, предваряются горящим макросом
CHECK-LABEL
. - Выберите имя функции тестов, используя формат
xyz_cn_im_...
для ограничений функции тестированияCn
,Im
и т. д. для операцииXyzOp
. В случаях, когда предложенный формат неприменим, сохраните существующее название. - После завершения вышеуказанного шага отсортируйте все тесты, относящиеся к тестируемой операции, в алфавитном порядке по имени функции.
- Продолжайте добавлять тесты до тех пор, пока CCOV не покажет >= 90% покрытия операции.
- Убедитесь, что в этом файле присутствуют все ограничения, связанные с тестами вывода формы, в соответствии с теми же правилами именования, которые указаны выше.
- Переместите все тесты вывода формы из файла ops_stablehlo.mlir в этот файл.
В спец.md :
- Добавьте ссылку на
stablehlo/tests/interpret/<op_mnemonic>.mlir
в раздел «Примеры» (например, « Дополнительные примеры »). - Убедитесь, что в спецификации есть только 1 пример.
- Убедитесь, что пример спецификации соответствует рекомендациям по тестированию .
- Убедитесь, что пример теста спецификации интерпретируем.
- Убедитесь, что пример спецификации такой же, как и в ODS.
- Добавьте ссылку на
В status.md :
- Обновите столбец «Интерпретатор» до
yes
.
- Обновите столбец «Интерпретатор» до