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
까지 차원의 이 순서는 주요 열(순위 2)과 비슷합니다. 차원의 단조로운 순서를 가정할 때 코드에서 이 레이아웃을 참조할 수 있는 또 다른 방법은 단순히 '어두운 0은 마이너스'입니다.
반면 레이아웃의 minor_to_major
필드가 [1, 0]
이면 선형 메모리의 레이아웃은 다음과 같습니다.
a b c d e f
N
차원 배열에서 N-1
부터 0
까지의 소차원 순서는 행-메이저 (순위 2)와 유사합니다. 차원의 단조로운 순서를 가정할 때 코드에서 이 레이아웃을 참조할 수 있는 또 다른 방법은 단순히 'dim 0 is major'입니다.
기본 서술형 순서
새로 만든 도형의 기본 레이아웃은 '측정기준 순서는 주-단-순'입니다(순위 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
를 참고하세요.