本頁面由 Cloud Translation API 翻譯而成。
Switch to English

形狀和佈局

XLA Shape原型( xla_data.proto )描述了N維數組(簡稱array )的等級,大小和數據類型。

術語,符號和約定

  • 數組的秩等於維數。數組的真實秩是大小大於1的維數。

  • 對於N維數組,維的編號從0N-1 。為了方便起見,尺寸編號是任意標籤。這些尺寸編號的順序並不意味著形狀佈局中的特定次要/主要順序。佈局由Layout原型確定。

  • 按照慣例,尺寸按尺寸編號的升序排列。例如,對於尺寸為[A x B x C]的3維數組,尺寸0為尺寸A ,尺寸1為尺寸B ,尺寸2為尺寸C

    XLA中的某些實用程序也支持負索引,類似於Python。維-1是最後一個維(對於N維數組,等效於N-1 )。例如,對於上述3維數組,維-1的大小為C ,維-2的大小為B ,依此類推。

  • 二維,三維和四維數組通常具有與維關聯的特定字母。例如,對於二維數組:

    • 維度0: y
    • 尺寸1: x

    對於3D陣列:

    • 維度0: z
    • 尺寸1: y
    • 維度2: x

    對於4D陣列:

    • 維度0: p
    • 維度1: z
    • 維度2: y
    • 維度3: x
  • XLA API中採用維度的函數按維度編號的升序進行排序。這與將維度作為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中的值是數組尺寸的順序(對於N維數組,其值為0N-1 ),第一個值是最次要的尺寸,最後一個值是最主要的尺寸。最次要的維度是逐步遍歷線性內存中排列的數組元素時變化最快的維度。

例如,考慮以下大小為[2 x 3] 2D數組:

 a b c
d e f
 

在這裡,尺寸0為尺寸2,尺寸1為尺寸3。如果佈局中的minor_to_major字段為[0, 1]則尺寸0為最小尺寸,尺寸1為最大尺寸。這對應於線性存儲器中的以下佈局:

 a d b e c f
 

0N-1次要到主要維度順序類似於列主要 (在等級2)。假設尺寸是單調排序,我們在代碼中用來引用此佈局的另一個名稱就是“ dim 0 is minor”。

另一方面,如果佈局中的minor_to_major字段為[1, 0]則線性存儲器中的佈局為:

 a b c d e f
 

對於N維數組,從N-10的次要到主要維度順序類似於行主要 (在等級2)。假設尺寸是單調排序,我們在代碼中用來引用此佈局的另一個名稱就是“ dim 0 is major”。

默認的從小到大排序

新創建的Shapes的默認佈局是“維度順序是從主要到次要”(類似於在行2的主要行)。

填充

在可選的padded_dimensionspadding_value字段中定義了填充。字段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中的IndexUtil類提供用於在給定形狀和佈局的多維索引和線性索引之間轉換的實用程序。多維索引包括每個維的int64索引。線性索引是單個int64值,該值索引到保存數組的緩衝區中。請參閱同一目錄中的shape_util.hlayout_util.h ,以獲取簡化形狀和佈局的創建和操作的實用程序。