רשימת משימות למפרט StableHLO

במסמך הזה אנחנו מסכם את ההנחיות לבדיקת השינויים במפרט. בשלב זה, השינויים האלה בדרך כלל כוללים בדיקה של כמה דברים במספר מקורות, ולכן המסמך הזה מסכם את כולם כדי לפשט את הבדיקות:

  1. בודקים שבעמודה "Specification" ב-status.md כתוב "yes". אם מוסיפים פעולה חדשה, מוסיפים שורה.
  2. בודקים אם שם הקטע תואם לכינוי של המבצע ב-ODS.
  3. בודקים אם הקטע 'סמנטיקה' תואם ל-Operation Semantics של XLA.
  4. בודקים אם הקטעים Inserts ו-Outputs:
    1. מציינים את אותם פריטים כמו ה-ODS.
    2. מציינים את אותם פריטים כמו HloInstruction::CreateFromProto.
    3. מסודרים בדיוק כמו ב-ODS.
    4. אם יש חוסר התאמה, בודקים שיש כרטיסים תואמים.
  5. בודקים אם הקטע "מגבלות":
    1. תואם ל-shape_inference.cc של XLA.
    2. תואם ל-hlo_verifier.cc של XLA.
    3. תואם ל-ODS.
    4. תואם ל-StablehloOps.cpp.
    5. אם יש חוסר התאמה, בודקים שיש כרטיסים תואמים. מקשרים את כל הכרטיסים האלה במפרט, במיקומים ספציפיים ככל האפשר (למשל, אם כרטיס עוסק באילוץ שלא יושם, צריך לקשר את הכרטיס ישירות באילוץ הזה).
    6. אם החלקים התואמים ב-ODS וב-StablehloOps.cpp תואמים למפרט, בודקים שבעמודות "Authentication" ו-"Type Inference" של status.md כתוב "yes".
  6. בודקים אם הקטע 'דוגמאות':
    1. יש רק דוגמה אחת. (בעתיד, נקשר לדוגמאות נוספות מחבילת הבדיקות של המתורגמן StableHLO).
    2. עושה שימוש בתחביר MLIR תקין על ידי הרצת stablehlo-opt על דוגמאות לקוד.
    3. נעשה שימוש בתחביר MLIR גנרי על ידי הרצת stablehlo-opt -mlir-print-op-generic (אנחנו מקפידים על תחביר גנרי במפרט כדי להימנע מהצורך לשנות את המפרט בשינויים בהדפסה יפה).
  7. בודקים שה-description ב-ODS של ההפעלה:
    1. כולל את המשפט הראשון של המפרט.
    2. לאחר מכן יש קישורים לקטע המתאים במפרט.
    3. לאחר מכן נשתמש באותה דוגמה כמו במפרט, אבל באמצעות תחביר יפה שיכול להתקבל על ידי הרצת stablehlo-opt.
  8. בודקים שהקבצים שקשורים להטמעה של אילוצים לגבי אימות והסקת מסקנות תואמים להנחיות שמפורטות בהמשך:
    1. פועלים לפי ההנחיות מס' 1 ל-StablehloOps.td.
    2. פועלים לפי ההנחיות מס' 2 ל-TypeInference.cpp ול-StablehloOps.cpp.
    3. פועלים לפי ההנחיות מס' 5 ל-ops_stablehlo.mlir.
    4. פועלים לפי ההנחיות מס' 6 לגבי infer_stablehlo.mlir.
  9. מעריכים את ההפעלה מבחינת השפעות לוואי וספקולציות.
    1. אם לפעולה אין תופעות לוואי ותמיד אפשר להתבסס על ספקולציות, צריך לתת לה את ה-trait Pure. זהו מצב נדיר כי רוב הפעולות מאפשרות ליצור צורות דינמיות, דבר שעלול להוביל לחוסר התאמה בצורות בזמן הריצה, כלומר התנהגות לא מוגדרת. לחלק מהפעולות עשויה להיות התנהגות לא מוגדרת גם במצבים אחרים. לרוב המכריע של הפעולות אין תופעות לוואי (הן צריכות לכלול את המאפיין NoMemoryEffect).
    2. רוב הפעולות נכללות באחת ממאפייני ה-HLO_SpeculatableIf*. אם הפעולה לא מתאימה לאף אחת מהאפשרויות האלה, צריך לספק לה את המאפיין ConditionallySpeculatable ולהטמיע את שיטות הממשק. מוסיפים בדיקות ל-stablehlo/tests/ops_speculatability.mlir כדי לכסות את לוגיקת הספקולציות.