Эта страница была переведа с помощью Cloud Translation API.
Switch to English

раскладка Плиточные

фигура 1

На рисунке 1 показано, как F32 массив [3,5] выложен в памяти с 2х2 черепицей. Фигура с этим макетом записываются в виде F32 [3,5] {1,0: (2,2)}, где 1,0 относится к физическому порядку размеров (minor_to_major поля в макете), а (2,2) после двоеточие указывает, черепицей физических размеров с помощью 2х2 плитки.

Наглядно плитки раскладывают, чтобы покрыть форму, а затем внутри каждую плитку, элементы затем изложены без черепицы, как и в приведенном выше примере, где правая часть примера показывает расположение в памяти, в том числе белых заполняющих элементов, которые добавляются для того, чтобы иметь полный 2х2 плитки, даже если исходные границы массива не являются даже.

Дополнительные элементы в обивке не обязаны содержать любое конкретное значение.

Линейный индекс формула для облицовки дала форму и плитку

Без черепицы, элемент е = (е п, е N-1, ..., E 1) в массиве с границей массива d = (d п, д п-1, ..., d 1) (d1 , является самый меньший размер) выложена главным незначительному порядка в позиции:

linear_index (д, д)
= Linear_index ((е п, е п-1, ..., е 1),п, д п-1, ..., d 1))
= Е п д п-1 ... d 1 + е п-1 д п-2 ... d 1 + ... + е 1

Для простоты обозначений в этом документе мы предполагаем, плитка имеет столько же размеры, как массив. В реализации XLA о черепице, это обобщаются паркеты с меньшим количеством измерений, оставляя исходные наиболее крупных размеры неизменными и применяя черепицу только для большинства размеров мелких, так что плиточный, который указан упоминает суффикс физических размеров форма будучи черепицей.

При черепицей размера (т, п т п-1, ..., т 1) используется, элемент в массиве с индексами (е п, е N-1, ..., е 1) отображается на этот положение в окончательном макете:

linear_index_with_tile (д, д, т)
= Linear_index ((⌊e / t⌋, е по модулю т), (⌈d / t⌉, т)) (арифметика поэлементно, (а, б) конкатенации)
= Linear_index ((⌊e п / т п ⌋, ..., ⌊e 1 / т 1 ⌋, е н т мод п, ..., е 1 по модулю т 1), (⌈d п / т п ⌉, ..., ⌈d 1 / т 1 ⌉, т п, т п-1, ..., т 1))
= Linear_index ((⌊e п / т п ⌋, ..., ⌊e 1 / т 1 ⌋), (⌈d п / т п ⌉, ..., ⌈d 1 / т 1 ⌉)) ∙ т п т п-1 ... T 1 + linear_index ((е п по модулю т п, ..., е 1 по модулю т 1),п, т п-1, ..., т 1))

Макет можно рассматривать как имеющие две части: (⌊e п / T N ⌋, ..., ⌊e 1 / т 1 ⌋), что соответствует индексу плитки в массиве плитки размером (⌈d п / т п ⌉, ..., ⌈d 1 / т 1 ⌉), и (е п по модулю т п, ..., е 1 по модулю т 1), что соответствует индексу внутри-плитки. Функция появляется CEIL в ⌈d я / т я ⌉ , потому что если плитка захвачена за пределы большего массива, обивка вставляется как показано на рисунке 1. Оба плитки и элементов внутри плитки раскладывают рекурсивно без черепицей.

Для примера на фиг.1, элемент (2,3) имеет индекс плитки (1,1), а внутри-плитки индекс (0,1), для комбинированных координат вектора (1, 1, 0, 1). Индексы плитки имеют границы (2, 3), а сама плитка (2, 2) для комбинированного вектора (2, 3, 2, 2). Линейный индекс с плиткой для элемента с индексом (2, 3) в логической форме тогда

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.

Черепица в качестве площадки-RESHAPE-транспонированной

Черепица на основе макет работает следующим образом:
Рассмотрим массив размеров (d N, D н-1, ..., d1) (d1 , является самым меньший размер). Когда она выложена черепицей размера (т п, т п-1, ..., т 1)1 является наиболее меньший размер), что плиточные может быть описана в терминах PAD-RESHAPE-транспонирование в следующем путь.

  1. Массив дополняется до (⌈d н / т п ⌉ ∙ т п, ..., ⌈d 1 / т 1 ⌉ ∙ т 1).
  2. Каждое измерение я разбивается на (⌈d я / т я ⌉, T I), т.е. массив изменена , чтобы
    (⌈D п / т п ⌉, т п, ..., ⌈d 1 / т 1 ⌉, т 1).
    Там нет никакого физического изменения макета в этом перекроить сам по себе, так что это Reshape является bitcast. Если кто-то явно не думает о черепицей, это Reshape может выразить любую форму с тем же числом элементов, что и мягкой форме - пример здесь, как выразить плитку таким образом.
  3. Транспонирование происходит путем перемещения т п, ..., т 1 до самых незначительных размеров, сохраняя при этом их относительный порядок, так что порядок размеров от большинства крупных до самых незначительных становится
    (⌈D п / т п ⌉, ..., ⌈d 1 / т 1 ⌉, т п, ..., т 1).

Окончательная форма имеет префикс
(⌈D п / т п ⌉, ..., ⌈d 1 / т 1 ⌉), который описывает количество плиток в каждом измерении. Элемент в массиве (е п, ..., е 1) переходит к этому элементу в окончательной форме:
(⌊E п / т п ⌋, ..., ⌊e 0 / т 0 ⌋ е н т мод п, ..., е 1 по модулю т 1). Легко видеть, что линейный индекс элемента следующим образом формулу, представленную выше, как и ожидалось.

Повторные плиточные

плиточный XLA становится еще более гибким, применяя его многократно.

фигура 2

На рисунке 2 показано, как массив размером 4x8 облицована двумя уровнями черепицей (первый 2x4 затем 2х1). Мы представляем это повторное разбиение как (2,4), (2,1). Каждый цвет указывает на 2х4 плитки и каждая красная кайма коробка является 2x1 плитка. Числа указывает на линейный индекс в памяти этого элемента в черепичной формате. Этот формат соответствует формату, используемому для BF16 на ТПЕ, за исключением того, что начальная плитка больше, а именно черепица представляет собой (8,128) (2,1), где цель второй облицовки с помощью 2x1 является собрать вместе два 16-битных значений образует одно 32 битное значение таким образом, что совмещается с архитектурой ТПА.

Следует отметить, что вторая или более поздняя плитка может относиться как к незначительным пределам плитки размеров, которые просто перестраивают данные в пределах плитки, как в этом примере с (8,128) (2,1), но может также относиться к основнымам поперечных плиткам размеры от предыдущей черепицы.

Комбинирование размеры плиток с использованием

плиточные X также поддерживает сочетание размеров. Например, он может объединить размеры в F32 [2,7,8,11,10] {4,3,2,1,0} в F32 [112110] {1,0}, прежде чем его с черепицей (2,3 ). Плитка используется (*, *, 2 *, 3). Здесь звездочка в плитке подразумевает принятие этого измерения и сочетая его с другим измерением более незначительного. Несколько смежных размеры могут быть отнесены вместе в одном измерении. Отнести измерение представлено значением плитки -1 в этом измерении плитки, которая не является действительной в противном случае в качестве плитки размера измерения.

Более точно, если размер я форма устраняется с помощью звездочки в плитках, то перед тем, перед определением черепицы применяются, что измерение удаляется из обоего формы будучи черепичным и вектор плитки, а также то, что было измерение я-- от формы имеет свой массив связан увеличился с D I-1 до D I D I-1. Этот шаг повторяется для каждой звездочки в векторе плитки.