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

mise en page juxtaposée

Figure 1

La figure 1 montre comment un F32 de la matrice [3,5] est disposée dans la mémoire d'un carrelage 2x2. Une forme avec cet agencement est écrit comme F32 [3,5] {1,0: (2,2)}, où 1,0 se rapporte à l'ordre physique des dimensions (minor_to_major de champ dans la mise en page), tandis que (2,2) après les deux points indique le carrelage des dimensions physiques par une tuile de 2x2.

tuiles Intuitivement sont disposées pour couvrir la forme, puis à l'intérieur de chaque carreau, les éléments sont ensuite disposés sans carrelage, comme dans l'exemple ci-dessus, où la partie droite de l'exemple montre la disposition en mémoire, y compris les éléments de rembourrage blancs qui sont ajoutés afin d'avoir des carreaux complets 2x2 même si les limites du tableau d'origine ne sont même pas.

Les éléments supplémentaires dans le rembourrage ne sont pas nécessaires pour contenir une valeur particulière.

formules d'index linéaire pour carrelage donné une forme et une tuile

Sans carrelage, un élément e = (e n, e n-1, ..., e 1) dans un tableau avec des limites du tableau D = (d n, d n-1, ..., d 1) (d1 est la dimension la plus mineure) est posée par ordre majeur à mineur à la position:

linear_index (e, d)
= Linear_index ((e n, e n-1, ..., e 1), (d n, d n-1, ..., d 1))
= E n d n-1 ... d 1 + e n-1 d n-2 ... d 1 + ... + e 1

Pour simplifier la notation dans ce document, nous supposons une tuile a le même nombre de dimensions que le tableau. Dans la mise en œuvre de XLA du carrelage, cela est généralisé à pavages avec moins de dimensions en laissant les dimensions initiales plus importantes sans changement et l'application du carrelage uniquement aux dimensions les plus mineures, de sorte que le carrelage spécifié mentionne un suffixe des dimensions physiques du forme étant carrelée.

Lorsque carrelage de taille (t n, t n-1, ..., t 1) est utilisé, un élément du tableau avec des indices (e n, e n-1, ..., e 1) est mis en correspondance avec ce position dans la mise en page finale:

linear_index_with_tile (e, d, t)
= Linear_index ((⌊e / t⌋, e mod t), (⌈d / t⌉, t)) (arithmétique élément par élément, (a, b) est la concaténation)
= Linear_index ((⌊e n / t n ⌋, ..., ⌊e 1 / t 1 ⌋, e mod n t n, ..., e 1 mod t 1), (⌈d n / t n ⌉, ..., ⌈d 1 / t 1 ⌉, t n, t n-1, ..., t 1))
= Linear_index ((⌊e n / t n ⌋, ..., ⌊e 1 / t 1 ⌋), (⌈d n / t n ⌉, ..., ⌈d 1 / t 1 ⌉)) ∙ t n t n-1 ... t 1 + linear_index ((e mod n t n, ..., e 1 t mod 1), (t n, t n-1, ..., t 1))

La disposition peut être considérée comme ayant deux parties: (⌊e n / t n ⌋, ..., ⌊e 1 / t 1 ⌋), ce qui correspond à un indice de tuiles dans une rangée de tuiles de taille (n ⌈d / t n ⌉, ..., ⌈d 1 / t 1 ⌉), et (e mod n t n, ..., e 1 mod t 1), ce qui correspond à un indice à l' intérieur de tuiles. La fonction ceil apparaît dans ⌈d i / t i ⌉ parce que si les tuiles écrasent les limites du tableau plus large, remplissage est inséré comme dans la figure 1. Les deux tuiles et éléments dans les tuiles sont disposées de façon récursive sans carrelage.

Pour l'exemple de la figure 1, l'élément (2,3) est d'indice de tuiles (1,1), et à l'intérieur de tuiles index (0,1), pour un vecteur de coordonnées combiné de (1, 1, 0, 1). Les indices de tuiles ont des bornes (2, 3) et la tuile elle-même est (2, 2) pour un vecteur combiné de (2, 3, 2, 2). L'indice linéaire avec les carreaux pour l'élément d'indice (2, 3) en forme logique est alors

linear_index_with_tile ((2,3), (3,5), (2,2))
= Linear_index ((1,1,0,1), (2,3,2,2))
= Linear_index ((1,1), (2,3)) ∙ 2 ∙ 2 + linear_index ((0,1), (2,2))
= (1 ∙ 3 + 1) ∙ 2 ∙ 2 + (0 ∙ 2 + 1)
= 17.

Carreler comme pad-Reshape-transposition

mise en page à base carreler-fonctionne comme suit:
Considérons une matrice de dimensions (d n, d n-1, ..., d1) (d1 est la plus dimension mineure). Quand il est aménagé avec carrelage de la taille (t n, t n-1, ..., t 1) (t 1 est la dimension la plus mineur), que le carrelage peut être décrit en termes de pad-Reshape-transposition dans ce qui suit façon.

  1. Le tableau est rembourré pour (⌈d n / t n ⌉ ∙ t n, ..., ⌈d 1 / t 1 ⌉ ∙ t 1).
  2. Chaque dimension i est divisée en (⌈d i / t i ⌉, t i), à savoir la matrice est remodelée pour
    (⌈D n / t n ⌉, t n, ..., ⌈d 1 / t 1 ⌉, t 1).
    Il n'y a pas de changement de disposition physique dans ce Reshape par lui-même, donc ce Reshape est un BitCast. Si l'on ne pense pas explicitement d'un carrelage, cette Reshape pourrait exprimer toute forme avec le même nombre d'éléments que la forme rembourrée - l'exemple est ici de la façon d'exprimer une tuile de cette façon.
  3. Une transposition arrive en déplaçant t n, ..., t 1 à la plupart des dimensions mineures tout en conservant leur ordre relatif, de sorte que l'ordre des dimensions de la plupart majeure pour la plupart mineures devient
    (⌈D n / t n ⌉, ..., ⌈d 1 / t 1 ⌉, t n, ..., t 1).

La forme finale a le préfixe
(⌈D n / t n ⌉, ..., ⌈d 1 / t 1 ⌉), qui décrit le nombre de carreaux dans chaque dimension. Un élément de la matrice (e n, ..., e 1) est mis en correspondance avec cet élément dans la forme finale:
(⌊E n / t n ⌋, ..., ⌊e 0 / t 0 ⌋, e mod n t n, ..., e 1 mod t 1). Il est facile de voir que l'indice linéaire de l'élément suivant la formule ci-dessus comme prévu.

carrelage répété

Le carrelage de XLA devient encore plus flexible en l'appliquant à plusieurs reprises.

Figure 2

La figure 2 montre comment une matrice de taille 4x8 est carrelée par deux niveaux de carrelage (premier 2x4 puis 2x1). Nous représentons ce carrelage répété comme (2,4) (2,1). Chaque couleur indique une tuile de 2x4 et chaque boîte de bordure rouge est une tuile de 2x1. Les chiffres indiquent l'indice linéaire dans la mémoire de cet élément dans le format mosaïque. Ce format correspond au format utilisé pour BF16 sur TPU, sauf que la tuile initiale est plus grande, à savoir le carrelage est (8128) (2,1), lorsque le but du second carrelage par 2x1 est de rassembler deux valeurs 16 bits à former une 32 valeur de bit d'une manière qui aligne avec l'architecture d'un TPU.

Notez qu'une seconde ou tuile plus tard peut se référer à la fois les dimensions mineures dans tuiles, qui réarrange simplement des données dans la tuile, comme dans cet exemple avec (8128) (2,1), mais peut également se référer à la grande croix de tuiles dimensions du carrelage avant.

La combinaison de dimensions à l'aide des tuiles

Le carrelage de XLA prend également en charge combinant dimensions. Par exemple, il peut combiner les dimensions en F32 [2,7,8,11,10] {4,3,2,1,0} dans F32 [112110] {} 1,0 avant de ce carrelage avec (2,3 ). Le carreau est utilisé (*, *, 2 *, 3). Voici un astérisque dans une tuile implique de prendre cette dimension et en le combinant avec la prochaine dimension plus mineur. Plusieurs dimensions adjacentes peuvent être regroupés ensemble dans une dimension. Une dimension englobé est représentée par une valeur de tuile de -1 en ce que la dimension de la tuile, ce qui est par ailleurs valide dans une tuile en tant que taille de la dimension.

Plus précisément, si la dimension i de la forme est éliminée par un astérisque dans la tuile, puis avant la définition préalable du carrelage est appliquée, cette dimension est retirée à la fois la forme étant en mosaïque et le vecteur de tuiles, et quelle était la dimension i-1 de la forme a son réseau lié a augmenté de d i-1 à d i D i-1. Cette étape est répétée pour chaque astérisque dans le vecteur de tuiles.