מידע על 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
- מוסיפים המרה בין גרסאות op חדשות וישנות בקובץ VhloToVersion.cpp
- לסוגי פריטים או למאפיינים חדשים:
- מוסיפים את הסוג בקובץ VhloTypes.td או את המאפיין בקובץ VhloAttrs.td.
- הוספת המרה מ-StableHLO ל-VHLO בקובץ StablehloLegalizeToVhlo.cpp
- הוספת המרה מ-VHLO ל-StableHLO בקובץ VhloLegalizeToStablehlo.cpp
3. הוספה / עדכון של בדיקות יחידה
שותף התוכן ששלח שינוי לא תואם אחראי גם לבדיקות יחידה חיוביות וגם לבדיקות יחידה שליליות של התכונה, וגם לבדיקות יחידה של תאימות.
בדיקת תאימות של יחידות כוללת עדכון של stablehlo_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
שמראה שאפשר לשדרג לאחור את הפעולה.
אם לפעולה יש מאפייני ברירת מחדל, צריך לכלול בדיקות שמראות שהמאפיינים האלה עוברים סריאליזציה ופעולה הפוכה (deserialization) בצורה נכונה.
4. הוספת בדיקת סריאליזציה של גרסאות
אחרי שמוסיפים בדיקות ל-stablehlo_legalize_to_vhlo.mlir
, מעתיקים את קובץ הבדיקה עם הגרסה הגדולה ביותר לקובץ חדש בגרסה החדשה, ומוסיפים את הבדיקות החדשות גם לקובץ הזה. תצטרכו גם ליצור קובץ bytecode משויך באמצעות 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