В этом документе мы суммируем рекомендации по рассмотрению изменений в спецификации. На данный момент эти изменения обычно включают проверку нескольких вещей в нескольких источниках, поэтому в этом документе они суммированы, чтобы упростить проверку:
- Убедитесь, что в столбце «Спецификация» в status.md указано «да», добавьте строку, если добавляете новую операцию.
- Проверьте, соответствует ли заголовок раздела мнемонике операции в ODS .
- Проверьте, соответствует ли раздел «Семантика» разделу «Семантика операций » XLA.
- Проверьте, есть ли в разделах «Входы» и «Выходы»:
- Перечислите те же элементы, что и СОД.
- Перечислите те же элементы, что и HloInstruction::CreateFromProto .
- Заказываются точно так же, как ODS.
- Если есть несоответствия, проверьте наличие соответствующих билетов.
- Проверьте, есть ли в разделе «Ограничения»:
- Соответствует shape_inference.cc XLA.
- Соответствует hlo_verifier.cc XLA.
- Соответствует ODS.
- Соответствует StablehloOps.cpp .
- Если есть несоответствия, проверьте наличие соответствующих билетов. Свяжите все эти заявки в спецификации в максимально конкретных местах (например, если заявка касается ограничения, которое не было реализовано, свяжите заявку прямо в этом ограничении).
- Если соответствующие части ODS и StablehloOps.cpp соответствуют спецификации, убедитесь, что в столбцах «Проверка» и «Вывод типа» в status.md указано «да».
- Проверьте, есть ли в разделе «Примеры»:
- Есть только один пример. (В будущем мы добавим ссылки на дополнительные примеры из набора тестов интерпретатора StableHLO).
- Использует действительный синтаксис MLIR, запуская
stablehlo-opt
в примерах кода. - Использует общий синтаксис MLIR, который можно получить, запустив
stablehlo-opt -mlir-print-op-generic
(мы придерживаемся общего синтаксиса в спецификации, чтобы избежать необходимости изменять спецификацию при изменениях в Prettyprinter).
- Проверьте, что
description
в ODS операции:- Включает первое предложение спецификации.
- Затем ссылки на соответствующий раздел спецификации.
- Затем используется тот же пример, что и в спецификации, но с использованием красивого синтаксиса, который можно получить, запустив
stablehlo-opt
.
- Убедитесь, что файлы, связанные с реализацией ограничений проверки и вывода типа, соответствуют рекомендациям, указанным ниже:
- Следуйте руководству № 1 для StablehloOps.td .
- Следуйте руководству №2 для TypeInference.cpp и StablehloOps.cpp .
- Следуйте руководству №5 для ops_stablehlo.mlir .
- Следуйте руководству №6 для infer_stablehlo.mlir .
- Оцените операцию на предмет побочных эффектов и возможности спекуляций .
- Если операция не имеет побочных эффектов и ее всегда можно спекулировать, придайте ей черту
Pure
. Это случается редко, поскольку большинство операций допускают использование динамических фигур, что может привести к несоответствию форм во время выполнения, что является неопределенным поведением. Некоторые операции могут иметь неопределенное поведение и в других ситуациях. Подавляющее большинство операций не имеют побочных эффектов (у них должна быть чертаNoMemoryEffect
). - Большинство операций попадают в одну из черт
HLO_SpeculatableIf*
. Если оператор не подходит ни под один из них, присвойте ему признакConditionallySpeculatable
и реализуйте методы интерфейса. Добавьте тесты вstablehlo/tests/ops_speculatability.mlir
чтобы охватить логику спекулятивности.
- Если операция не имеет побочных эффектов и ее всегда можно спекулировать, придайте ей черту