במסמך הזה נסכם את ההנחיות להטמעה ולבדיקה של הכלי לתרגום. אנחנו כוללים בכוונה כמה פעולות משניות שקשורות למאמת ולהסקת טיפוסים, כדי להתקדם בנושאים האלה במקביל להטמעת המתורגמן.
במהלך הטמעת הפעולה
- עליכם לכתוב אסטרטגיית בדיקה כתובה במפורש (בתיאור של ה-PR) שדומה לזו, ולהשתמש בה כחומר עזר כשבודקים את שיטות האימות והסוג להסקת המסקנות, ואת הבדיקות המתאימות. הבודק יבדוק שוב שהתיאור מקיף.
- כדאי להיעזר ב-hlo_evaluator כדי לזהות פרטי הטמעה מורכבים וחוסרים פוטנציאליים בפונקציונליות.
- אם מצאתם באגים או פונקציונליות חסרה, תוכלו לשלוח כרטיסים לרכיבי התוכנה המתאימים.
אחרי הטמעת הפעולה
-
- צריך לוודא שהשדה
summary
בגוף ליישוב מחלוקות מחוץ לכותלי בית המשפט תואם לפורמט הסטנדרטי. (כרטיס קשור) מוסיפים תגובות שמתייחסות לתוויות האילוצים (למשל
Cn
אוIn
) מהמפרט בפורמטxyz_cn
אוxyz_in
, עבור הפעולהXyzOp
, כדי לזהות את ההתאמה בין האילוצים ב-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
, עבור הפעולהXyzOp
, כדי לזהות אילו חלקים של מאמתים ופונקציות לעיצוב תואמים לאילו אילוצים במפרט.- אפשר להוסיף לתגובה כמה תוויות אילוצים או כמה תגובות עם אותה תווית אילוצים. הכל תלוי באופן שבו האילוצים מוטמעים. אם יש אילוצים רצופים, אפשר לצמצם אותם ל-
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - אם יש חוסר התאמה בין המגבלות בהטמעה לעומת המגבלות במפרט, צריך לוודא שיש בעיה פתוחה שמשקפת את הפער הזה.
- אפשר להוסיף לתגובה כמה תוויות אילוצים או כמה תגובות עם אותה תווית אילוצים. הכל תלוי באופן שבו האילוצים מוטמעים. אם יש אילוצים רצופים, אפשר לצמצם אותם ל-
-
- אפשר להוסיף קובץ בשם
<op_mnemonic>.mlir
. - כותבים בדיקות בהתאם להנחיות לבדיקה.
- אפשר להוסיף קובץ בשם
-
- מריצים את כל הבדיקות המושבתות שנכללות בפעולה החדשה שנוספה.
- אם הבדיקות עוברות, מפעילים אותן על ידי המרת
RUN-DISABLED
ל-RUN
. - אם בדיקה נכשלת מסיבה כלשהי שאינה אי-התאמה ברמת הדיוק, צריך לתקן את ההטמעה או את הבדיקה.
- במקרים של אי-התאמות מדויקות, מתייגים את הבדיקה באמצעות
RUN-DISABLED(#1278)
(אם עדיין לא עשיתם זאת).
-
- חשוב לוודא שיש לפחות בדיקה אחת (חיובית או שלילית) לכל אילוץ במאמת ובשיטות להסקת הטיפוס. אילוצים שכלולים ב-ODS לא ייבדקו. רוב הבדיקות האלה יהיו שליליות, כדי לבדוק שהאילוצים לא מתקיימים, או חיוביות, כדי לבדוק שהצורה המשוערת נכונה.
- מוודאים שכל הבדיקות שקשורות לפעולה שנבדקה נמצאות יחד.
- חשוב לוודא שכל הבדיקות שקשורות לפעולה שנבדקת מתחילות במאקרו
CHECK-LABEL
lit. - בוחרים את שם הפונקציה של הבדיקות לפי הפורמט
xyz_cn_im_...
לבדיקת אילוצים של פונקציהCn
,Im
וכו' עבור הפעולהXyzOp
. במקרים שבהם הפורמט המוצע לא רלוונטי, משאירים את השם הקיים. - אחרי השלמת השלב שלמעלה, ממיינים את כל הבדיקות שקשורות לפעולה שנבדקת לפי סדר אלפביתי על סמך שם הפונקציה.
- ממשיכים להוסיף בדיקות עד שמדד ccov מראה כיסוי של 90% או יותר של הפעולה.
בקובץ infer_stablehlo.mlir:
- חשוב לוודא שכל האילוצים שקשורים לבדיקות של הסקת הצורה נמצאים בקובץ הזה, בהתאם לאותן הנחיות למתן שמות שצוינו למעלה.
- מעבירים את כל הבדיקות של מסקנות הצורה מהקובץ ops_stablehlo.mlir לקובץ הזה.
בקובץ spec.md:
- מוסיפים קישור אל
stablehlo/tests/interpret/<op_mnemonic>.mlir
לקטע 'דוגמאות' (למשל, דוגמאות נוספות). - מוודאים שבמפרט יש רק דוגמה אחת.
- חשוב לוודא שדוגמת המפרט עומדת בהנחיות לבדיקה.
- מוודאים שאפשר להבין את הבדיקה לדוגמה של המפרט.
- צריך לוודא שהדוגמה למפרט זהה לזו שמופיעה בגוף ליישוב מחלוקות מחוץ לכותלי בית המשפט.
- מוסיפים קישור אל
בקובץ status.md:
- מעדכנים את העמודה 'מתרגם' לערך
yes
.
- מעדכנים את העמודה 'מתרגם' לערך