Информацию о VHLO можно найти на vhlo.md
Внесение несовместимых изменений
Все изменения, влияющие на совместимость, должны пройти процедуру RFC. Сюда входит добавление, прекращение поддержки или переименование функции. После утверждения RFC необходимо выполнить следующие шаги:
1. Увеличьте номер версии в Version.h и обновите журнал версий.
Перед обновлением операций, атрибутов, типов или преобразований VHLO увеличьте дополнительный номер версии в Version.h и обновите журнал версий в VhloDialect.td.
Любые новые добавленные функции VHLO будут использовать эту обновленную версию, например, после обновления 0.10.0 --> 0.11.0
новая операция в VhloOps.td будет использовать:
VHLO_Op<"abs_v2", "0.11.0", "current">
2. Добавьте необходимую реализацию VHLO и преобразования.
Точный код, необходимый для интеграции новой функции, может отличаться, но по большей части необходимо будет изменить следующее:
- Для новых операций:
- Добавьте операцию в VhloOps.td.
- Добавьте преобразование StableHLO → VHLO в StablehloLegalizeToVhlo.cpp.
- Добавьте преобразование VHLO → StableHLO в VhloLegalizeToStablehlo.cpp.
- Для новых версий существующих операций:
- Добавьте операцию в VhloOps.td.
- Обновите сопоставление StableHLO с VHLO в MapStablehloToVhlo.h.
- Добавьте преобразование между новой и старой версиями операций в VhloToVersion.cpp.
- Для новых типов или атрибутов:
- Добавьте тип в VhloTypes.td или атрибут в VhloAttrs.td.
- Добавьте преобразование StableHLO → VHLO в StablehloLegalizeToVhlo.cpp.
- Добавьте преобразование VHLO → StableHLO в VhloLegalizeToStablehlo.cpp.
3. Добавить/обновить модульные тесты
Автор несовместимого изменения несет ответственность как за положительные, так и за отрицательные модульные тесты функции, а также модульные тесты совместимости.
Модульное тестирование совместимости включает обновление стабильного_legalize_to_vhlo.mlir , чтобы гарантировать совместимость StableHLO с последней версией VHLO, а также любые необходимые дополнительные тесты прямой или обратной совместимости. Например, если вы добавляете новую операцию в версии X
с Y = X - 1
, добавьте тестовый файл, например vhlo_to_version_downgrade_invalid.0_Y_0.mlir
, который показывает, что операция не поддерживается до версии X
При добавлении новой версии операции добавьте тестовый файл, например vhlo_to_version_downgrade.0_Y_0.mlir
, который показывает, что версия операции может быть успешно понижена.
Если ваша операция имеет атрибуты по умолчанию, включите тесты, которые покажут, что значения по умолчанию сериализуются и десериализуются правильно.
4. Добавьте тест сериализации с поддержкой версий
После добавления тестов в stablehlo_legalize_to_vhlo.mlir
скопируйте тестовый файл с самой большой версией в новый файл новой версии, а также добавьте новые тесты в этот файл. Вам также потребуется создать связанный файл байт-кода с помощью stablehlo-translate
:
export TARGET_VERSION=1.X.0
export TARGET_FILENAME=${TARGET_VERSION//./_}
stablehlo-translate --serialize --target=$TARGET_VERSION --strip-debuginfo stablehlo/tests/vhlo/stablehlo_legalize_to_vhlo.$TARGET_FILENAME.mlir > stablehlo/tests/vhlo/stablehlo_legalize_to_vhlo.$TARGET_FILENAME.mlir.bc