דף זה תורגם על ידי Cloud Translation API.
Switch to English

צורות ופריסה

הפרוטו של Shape XLA ( xla_data.proto ) מתאר את הדירוג, הגודל וסוג הנתונים של מערך ממדי N ( מערך בקיצור).

מונחים, סימנים ומוסכמות

  • דרגת מערך שווה למספר הממדים. הדרגה האמיתית של מערך היא מספר הממדים שיש להם גודל גדול מ -1.

  • הממדים ממוספרים מ 0 עד N-1 עבור מערך ממדי N מספרי הממדים הם תוויות שרירותיות לנוחיותם. סדר מספרי הממדים הללו אינו מרמז על סדר מינורי / עיקרי מסוים במערך הצורה. הפריסה נקבעת על ידי הפרוטו של Layout .

  • על פי המוסכמה, הממדים מופיעים בסדר הולך וגובר של מספר הממד. לדוגמה, עבור מערך תלת מימדי בגודל [A x B x C] , לממד 0 יש גודל A , לממד 1 יש גודל B ולממד 2 יש גודל C

    כלי עזר מסוימים ב- XLA תומכים גם באינדקס שלילי, בדומה לפיתון; ממד -1 הוא הממד האחרון (שווה ערך ל- N-1 עבור מערך ממדי N ). לדוגמא, עבור המערך התלת מימדי המתואר לעיל, לממד -1 יש גודל C , לממד -2 יש גודל B וכן הלאה.

  • למערכים שניים, שלושה וארבעה מימדים לרוב יש אותיות ספציפיות הקשורות לממדים. לדוגמה, עבור מערך דו מימדי:

    • ממד 0: y
    • ממד 1: x

    עבור מערך תלת ממדי:

    • ממד 0: z
    • ממד 1: y
    • ממד 2: x

    עבור מערך 4D:

    • ממד 0: p
    • ממד 1: z
    • ממד 2: y
    • ממד 3: x
  • פונקציות בממשק ה- API של ה- XLA שלוקחות מימדים, עושות זאת בהגדלת הסדר של מספר הממד. זה תואם את ההזמנה המשמשת בעת העברת מידות initializer_list ; לְמָשָׁל

    ShapeUtil::MakeShape(F32, {A, B, C, D})

    תיצור צורה שמערך גודל הממד שלה מורכב מהרצף [A, B, C, D] .

מַעֲרָך

הפרוטו של Layout מתאר כיצד מערך מיוצג בזיכרון. הפרוטו של Layout כולל את השדות הבאים:

 message Layout {
  repeated int64 minor_to_major = 1;
  repeated int64 padded_dimensions = 2;
  optional PaddingValue padding_value = 3;
}
 

הזמנת ממד קטין עד עיקרי

השדה הנדרש היחיד הוא minor_to_major . שדה זה מתאר את הסדר הקטין עד העיקרי של הממדים בתוך צורה. ערכים ב- minor_to_major הם סדר גודל הממדים של המערך ( 0 עד N-1 עבור מערך ממדי N ), כאשר הערך הראשון הוא הממד הכי מינורי עד לערך האחרון שהוא הממד הגדול ביותר. המימד הקטין ביותר הוא המימד המשתנה במהירות ביותר כאשר עובר דרך אלמנטים של המערך המונחים בזיכרון הליניארי.

לדוגמה, שקול את מערך הדו-מימד הבא בגודל [2 x 3] :

 a b c
d e f
 

כאן ממד 0 הוא גודל 2, וממד 1 הוא גודל 3. אם השדה minor_to_major בפריסה הוא [0, 1] אז מימד 0 הוא המימד הכי מינורי ומימד 1 הוא הממד העיקרי ביותר. זה תואם את הפריסה הבאה בזיכרון הליניארי:

 a d b e c f
 

סדר ממד מינורי-גדול-עיקרי זה של 0 עד N-1 דומה לטור-מז'ור (בדרגה 2). בהנחה של סדר מידות מונוטוני, שם אחר שנשתמש בו בכדי להתייחס לפריסה זו בקוד הוא פשוט "dim 0 הוא מינורי".

מצד שני, אם השדה minor_to_major בפריסה הוא [1, 0] אז הפריסה בזיכרון הליניארי היא:

 a b c d e f
 

סדר ממד מינורי-למג'ור של N-1 למטה ל 0 עבור מערך ממדי N דומה לזה לשורה-מז'ור (בדרגה 2). בהנחה של סדר מידות מונוטוני, שם אחר שנשתמש בו בכדי להתייחס לפריסה זו בקוד הוא פשוט "dim 0 הוא major".

ברירת מחדל להזמנה מינורית עד גדולה

פריסת ברירת המחדל עבור צורות שזה עתה נוצרה היא "סדר המימדים הוא מז'ור-מינורי" (דומה לשורה-מז'ור בדרגה 2).

ריפוד

ריפוד מוגדר האופציונלי padded_dimensions ו padding_value שדות. padded_dimensions השדה padded_dimensions מתארים את הגדלים ( padded_dimensions ) אליהם מרופד כל מאפיין. אם קיים, מספר האלמנטים padded_dimensions חייב להיות שווה לדרגת הצורה.

לדוגמא, בהתחשב במערך [2 x 3] שהוגדר לעיל, אם padded_dimensions הם [3, 5] אז ממד 0 מרופד לרוחב של 3 וממד 1 מרופד לרוחב של 5. הפריסה בזיכרון ליניארי (בהנחה ערך ריפוד של 0 ופריסת עמוד ראשי):

 a d 0 b e 0 c f 0 0 0 0 0 0 0
 

זה שווה לפריסה של המערך הבא באותו סדר ממד מינורי-גדול.

 a b c 0 0
d e f 0 0
0 0 0 0 0
 

יצירת אינדקס למערכים

המחלקה IndexUtil ב- index_util.h מספקת כלים להמרה בין מדדים רב ממדיים ומדדים ליניאריים שניתנים לצורה ולפריסה . מדדים רב int64 כוללים אינדקס int64 לכל ממד. מדדים ליניאריים הם ערך int64 בודד int64 למאגר המחזיק את המערך. ראו shape_util.h ו- layout_util.h באותה ספרייה עבור כלי עזר layout_util.h יצירה ומניפולציה של צורות ופריסות.