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

Формы и макет

Прото XLA Shape ( xla_data.proto ) описывает ранг, размер и тип данных N-мерного массива (кратко массив ).

Терминология, обозначения и условные обозначения

  • Ранг массива равен количеству измерений. Истинный ранг массива - это число измерений, размер которых больше 1.

  • Размеры пронумерованы от 0 до N-1 для N размерного массива. Для удобства номера размеров являются произвольными метками. Порядок этих числовых чисел не подразумевает особого младшего / основного порядка в макете фигуры. Макет определяется макетом Layout .

  • По соглашению размеры перечислены в порядке возрастания номера измерения. Например, для трехмерного массива размером [A x B x C] размер 0 имеет размер A , размер 1 имеет размер B а размер 2 имеет размер C

    Некоторые утилиты в XLA также поддерживают отрицательную индексацию, подобно Python; измерение -1 является последним измерением (эквивалентным N-1 для N размерного массива). Например, для трехмерного массива, описанного выше, размер -1 имеет размер C , размер -2 имеет размер B и так далее.

  • Двух-, трех- и четырехмерные массивы часто имеют определенные буквы, связанные с измерениями. Например, для двумерного массива:

    • размерность 0: y
    • размер 1: x

    Для трехмерного массива:

    • размерность 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 - это порядок измерений массива (от 0 до N-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
 

Этот порядок измерения от младшего к большему от 0 до N-1 похож на основной столбец (на уровне 2). Предполагая монотонный порядок измерений, другое имя, которое мы можем использовать для ссылки на этот макет в коде, просто «dim 0 is minor».

С другой стороны, если поле minor_to_major в макете равно [1, 0] то макет в линейной памяти:

 a b c d e f
 

Порядок измерения от младшего к большему от N-1 до 0 для N мерного массива сродни мажорной строке (на уровне 2). Предполагая монотонный порядок измерений, другое имя, которое мы можем использовать для ссылки на этот макет в коде, просто «dim 0 is major».

Порядок по умолчанию второстепенный

Макет по умолчанию для вновь созданных фигур - «порядок измерений от мажора до минора» (сродни мажоре строки на ранге 2).

набивка

Заполнение определяется в необязательных padded_dimensions и padding_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 в index_util.h предоставляет утилиты для преобразования между многомерными и линейными индексами, заданными формой и макетом. Многомерные индексы включают в int64 индекс int64 для каждого измерения. Линейные индексы - это одно значение типа int64 которое индексируется в буфере, содержащем массив. См. shape_util.h и layout_util.h в одном каталоге для утилит, которые упрощают создание и манипулирование формами и макетами.