此页面由 Cloud Translation API 翻译。
Switch to English

形状和布局

该XLA Shape原( xla_data.proto )描述的秩,大小和数据的N维阵列的类型(在短数组 )。

术语,符号,和公约

  • 数组的秩等于维数。阵列的真实秩是其尺寸大于1的维数。

  • 尺寸是从编号为0N-1用于N维阵列。维度数目是为了方便任意标签。这些维数的顺序并不意味着形状布局的特定次要/主要排序。布局由所确定的Layout原。

  • 按照惯例,尺寸已列在增加的维数顺序。例如,对于大小的3维阵列[A x B x C]尺寸0具有大小A ,尺寸1具有大小B和维度2具有尺寸C

    在XLA有些工具还支持负的索引,类似于Python的;维-1是最后一维(相当于N-1用于N维阵列)。例如,对于3维阵列如上所述,维-1具有大小C ,尺寸-2具有大小B等。

  • 二,三,四二维数组经常与尺寸有关的特定字母。例如,对于一个二维数组:

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

    对于3D阵列:

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

    对于一个四维阵列:

    • 尺寸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是阵列的尺寸(的排序0N-1对的N与所述第一值是最高次要尺寸高达的最后一个值是最-主要尺寸维阵列)。最-次要尺寸是线性存储器中规定的阵列的元件步进时改变最迅速的尺寸。

例如,考虑大小以下2D阵列[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
 

这轻微的到主设备的维序0N-1是类似于列优先 (在秩2)。假设尺寸的单调排序,我们可以用它来指代这种布局在代码中的另一个名称就是“暗0是次要的”。

在另一方面,如果minor_to_major在布局字段是[1, 0]然后在线性内存中的布局是:

 a b c d e f
 

的A小调到主要维序N-10用于N维阵列类似于行优先 (在秩2)。假设尺寸的单调排序,我们可以用它来指代这种布局在代码中的另一个名称就是“暗0是主要的”。

使用默认次要到大排序

新创建形状的默认布局是“维序是主要的对未成年人”(类似于行主要在2级)。

填充

填充在可选的定义padded_dimensionspadding_value领域。领域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
 

索引到数组

IndexUtilindex_util.h提供工具,用于多维索引之间和线性给出的形状和布局的索引转换。多维指标包括int64每个维度指标。线性指数是一个单一int64值索引到缓冲器保持该阵列。见shape_util.hlayout_util.h在同一目录公用事业,简化创建和形状和布局的操作。