XLA Shape
proto(xla_data.proto)는 N차원 배열 (배열)의 순위, 크기, 데이터 유형을 설명합니다.
용어, 표기법, 규칙
배열의 순위는 차원의 수와 같습니다. 배열의 실제 순위는 크기가 1보다 큰 차원의 수입니다.
N
차원 배열의 경우 측정기준에는0
부터N-1
까지 번호가 매겨집니다. 측정기준 번호는 편의를 위한 임의의 라벨입니다. 이러한 치수 번호의 순서는 도형의 레이아웃에서 특정한 하위 또는 주요 순서를 의미하지 않습니다. 레이아웃은Layout
proto에 의해 결정됩니다.측정기준은 일반적으로 측정기준 수의 오름차순으로 나열됩니다. 예를 들어 크기가
[A x B x C]
인 3차원 배열의 경우 차원 0의 크기는A
이고, 차원 1의 크기는B
이며 차원 2의 크기는C
입니다.XLA의 일부 유틸리티는 Python과 유사한 음수 색인 생성도 지원합니다. 차원 -1은 마지막 차원입니다 (
N
차원 배열의N-1
와 같음). 예를 들어 위에서 설명한 3차원 배열에서 차원 -1의 크기는C
이고, 차원 -2의 크기는B
입니다.2차원 배열, 3차원 배열, 4차원 배열은 특정 문자가 차원과 연결되는 경우가 많습니다. 예를 들어 2D 배열의 경우 다음과 같습니다.
- 측정기준 0:
y
- 측정기준 1:
x
3D 배열의 경우:
- 측정기준 0:
z
- 측정기준 1:
y
- 측정기준 2:
x
4D 배열의 경우:
- 측정기준 0:
p
- 측정기준 1:
z
- 측정기준 2:
y
- 측정기준 3:
x
- 측정기준 0:
차원을 취하는 XLA API의 함수는 차원 수의 오름차순으로 수행합니다. 이는 측정기준을
initializer_list
로 전달할 때 사용되는 순서와 일치합니다.예를 들면 다음과 같습니다.ShapeUtil::MakeShape(F32, {A, B, C, D})
차원 크기 배열이
[A, B, C, D]
시퀀스로 구성되는 도형을 만듭니다.
레이아웃
Layout
proto는 배열이 메모리에서 표시되는 방식을 설명합니다. Layout
proto에는 다음 필드가 포함됩니다.
message Layout {
repeated int64 minor_to_major = 1;
repeated int64 padded_dimensions = 2;
optional PaddingValue padding_value = 3;
}
소규모에서 주요 측정기준 정렬
유일한 필수 필드는 minor_to_major
입니다. 이 필드는 도형 내에서 치수의 작은 순서를 설명합니다. minor_to_major
의 값은 배열 차원의 순서 (N
차원 배열의 경우 0
부터 N-1
까지)이며, 여기서 첫 번째 값은 가장 큰 차원인 마지막 값까지 가장 작은 차원입니다. 최고 부 차원은 선형 메모리에 배치된 배열의 요소를 단계별로 실행할 때 가장 빠르게 변경되는 차원입니다.
예를 들어 크기가 [2 x 3]
인 다음 2D 배열을 살펴보겠습니다.
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
까지의 이 소차원 순서는 column-major(순위 2)와 비슷합니다. 차원의 단조로운 순서를 가정할 때 코드에서 이 레이아웃을 언급할 수 있는 또 다른 방법은 단순히 'dim 0은 마이너다'입니다.
반면 레이아웃의 minor_to_major
필드가 [1, 0]
이면 선형 메모리의 레이아웃은 다음과 같습니다.
a b c d e f
N
차원 배열에서 N-1
에서 0
까지 음차 차원 순서는 행-주 차원 (순위 2)과 비슷합니다. 차원을 단조롭게 정렬한다고 가정할 때 코드에서 이 레이아웃을 언급할 수 있는 또 다른 방법은 'dim 0 is large'입니다.
기본 소대장 순서
새로 만든 Shapes의 기본 레이아웃은 '크기 순서는 장차-부'입니다(순위 2의 행-주요 레이아웃과 유사).
패딩
패딩은 선택적 padded_dimensions
및 padding_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
배열로 색인 생성
index_util.h의 IndexUtil
클래스는 도형과 레이아웃을 고려하여 다차원 색인과 선형 색인 간에 변환하는 유틸리티를 제공합니다. 다차원 색인에는 각 측정기준의 int64
색인이 포함됩니다. 선형 색인은 배열을 보유한 버퍼의 색인을 생성하는 단일 int64
값입니다. 도형과 레이아웃의 생성과 조작을 단순화하는 유틸리티는 동일한 디렉터리에 있는 shape_util.h
및 layout_util.h
를 참고하세요.