Cette page a été traduite par l'API Cloud Translation.
Switch to English

Formes et mise en page

Le XLA Shape proto ( xla_data.proto ) décrit le rang, la taille et le type d'une matrice à N dimensions données (tableau en abrégé).

Terminologie, notation et conventions

  • Le rang d'un tableau est égal au nombre de dimensions. Le véritable rang d'un tableau est le nombre de dimensions qui ont une taille supérieure à 1.

  • Les dimensions sont numérotés de 0 à N-1 pour une N matrice bidimensionnelle. Les numéros de dimension sont des étiquettes arbitraires pour plus de commodité. L'ordre de ces numéros de dimension ne signifie pas un ordre mineur / majeur notamment dans la mise en page de la forme. La mise en page est déterminée par la Layout en Layout proto.

  • Par convention, les dimensions sont énumérées dans l'ordre croissant du nombre de dimension. Par exemple, pour une matrice en 3 dimensions de taille [A x B x C] , dimension 0 a la taille A , dimension 1 a une taille B et dimension 2 a une taille C .

    Certains services publics dans XLA soutiennent également l'indexation négative, de façon similaire à Python; dimension -1 est la dernière dimension (équivalent à N-1 pour une N matrice bidimensionnelle). Par exemple, pour la matrice en 3 dimensions décrites ci - dessus, la dimension a une taille -1 C , -2 dimension a une taille B et ainsi de suite.

  • Deux, trois, et quatre tableaux de dimensions ont souvent des lettres spécifiques associées aux dimensions. Par exemple, pour un tableau 2D:

    • dimension 0: y
    • dimension 1: x

    Pour un tableau 3D:

    • dimension 0: z
    • dimension 1: y
    • dimension 2: x

    Pour un tableau 4D:

    • dimension 0: p
    • dimension 1: z
    • dimension 2: y
    • dimension 3: x
  • Fonctions de l'API XLA qui prennent des dimensions font dans l'ordre croissant du nombre de dimension. Cela correspond à la commande utilisée lors du passage des dimensions comme un initializer_list ; par exemple

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

    Va créer une forme dont la gamme de taille dimension consiste en la séquence [A, B, C, D] .

Disposition

La Layout en proto décrit comment un tableau est représenté dans la mémoire. La Layout en Layout proto comprend les champs suivants:

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

Mineure à grande commande de dimension

Le seul champ obligatoire est minor_to_major . Ce champ décrit l'ordre mineur à majeur des dimensions à l'intérieur d'une forme. Les valeurs dans minor_to_major sont un ordre des dimensions du tableau ( 0 à N-1 pour une N matrice bidimensionnelle) avec la première valeur étant à la dernière valeur qui est la dimension la plus grande à la dimension la plus petite vers le haut. La dimension la plus petite est la dimension qui varie plus rapidement lorsque le renforcement à travers les éléments de la matrice prévue dans la mémoire linéaire.

Par exemple, considérons le tableau 2D suivant la taille [2 x 3] :

 a b c
d e f
 

Ici dimension 0 est la taille 2, et la dimension 1 est de taille 3. Si le minor_to_major champ dans la mise en page est [0, 1] dimensionner alors 0 est la dimension la plus petite et la dimension 1 est la dimension la plus importante. Ceci correspond au schéma suivant dans la mémoire linéaire:

 a d b e c f
 

Cette commande à majeur-mineur dimension de 0 à N-1 est semblable à colonne principale (au rang 2). En supposant un ordre monotones de dimensions, un autre nom que nous pouvons utiliser pour faire référence à cette disposition dans le code est tout simplement « 0 dim est mineur ».

D'autre part, si le minor_to_major champ dans la mise en page est [1, 0] puis la mise en page en mémoire linéaire est la suivante :

 a b c d e f
 

Un ordre de dimension à majeur-mineur de N-1 jusqu'à 0 pour une N matrice bidimensionnelle est semblable à rangée principale (au rang 2). En supposant un ordre monotones de dimensions, un autre nom que nous pouvons utiliser pour faire référence à cette disposition dans le code est simplement « faible 0 est important ».

Par défaut mineur à majeur commande

La mise en page par défaut pour les nouvellement créés formes est « l'ordre de dimension est importante à mineur » (semblable à la ligne-major au rang 2).

Rembourrage

Rembourrage est défini dans les options padded_dimensions et padding_value champs. Le champ padded_dimensions décrit les dimensions (largeur) dans laquelle chaque dimension est rembourré. Le cas échéant, le nombre d'éléments dans padded_dimensions doit être égal au rang de la forme.

Par exemple, étant donné le [2 x 3] tableau défini ci - dessus, si padded_dimensions est [3, 5] puis dimension 0 est rembourré pour une largeur de 3 et une dimension est rembourré à une largeur de 5. La mise en page dans la mémoire linéaire ( en supposant une valeur de remplissage de 0 et colonne de mise en page majeur) est la suivante:

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

Cela équivaut à la mise en page du tableau suivant avec la même dimension-major mineur pour:

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

L'indexation dans des tableaux

La classe IndexUtil en index_util.h fournit des utilitaires de conversion entre les indices multidimensionnels et indices linéaire donné une forme et la disposition. Indices multidimensionnels comprennent un int64 index pour chaque dimension. Indices linéaires sont une seule int64 valeur qui indexe dans la mémoire tampon de maintien de la matrice. Voir shape_util.h et layout_util.h dans le même répertoire pour les services publics que la création et la manipulation de simplifier les formes et les mises en page.