이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

모양과 레이아웃

XLA Shape 프로토 ( xla_data.proto )는 N 차원 배열 (짧은 배열 )의 순위, 크기 및 데이터 유형을 설명합니다.

용어, 표기법 및 규칙

  • 배열의 순위는 차원 수와 같습니다. 배열의 실제 순위 는 크기가 1보다 큰 차원의 수입니다.

  • 차원은 N 차원 배열의 경우 0 에서 N-1 까지 번호가 매겨집니다. 치수 번호는 편의상 임의의 레이블입니다. 이러한 치수 번호의 순서는 모양의 레이아웃에서 특정 부 / 주요 순서를 의미하지 않습니다. 레이아웃은 Layout 프로토 타입에 의해 결정됩니다.

  • 일반적으로 치수는 치수 번호의 순서대로 나열됩니다. 예를 들어 크기가 [A x B x C] 인 3 차원 배열의 경우 차원 0의 크기는 A 이고 차원 1의 크기는 B 이고 차원 2의 크기는 C 입니다.

    XLA의 일부 유틸리티는 Python과 마찬가지로 음수 색인을 지원합니다. 차원 -1은 마지막 차원입니다 ( N 차원 배열의 경우 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
  • 차원을 취하는 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 값은 배열의 차원 ( 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 등급). 단조로운 치수 순서를 가정 할 때 코드에서이 레이아웃을 참조하는 데 사용할 수있는 다른 이름은 단순히 "dim 0은 부"입니다.

반면, 레이아웃의 minor_to_major 필드가 [1, 0] 경우 선형 메모리의 레이아웃은 다음과 같습니다.

 a b c d e f
 

N 차원 배열의 N-1 에서 0 까지의 부-대-주 차원 차수는 행-주 (2 위)와 유사합니다. 단조로운 차원의 순서를 가정 할 때 코드에서이 레이아웃을 참조하는 데 사용할 수있는 다른 이름은 단순히 "dim 0이 중요합니다"입니다.

기본 사소한 주문

새로 작성된 셰이프의 기본 레이아웃은 "치수 차수는 대소수"입니다 (순위 2에서 행 대수에 해당).

패딩은 선택적 padded_dimensionspadding_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
 

배열로 인덱싱

IndexUtilIndexUtil 클래스는 모양과 레이아웃이 지정된 다차원 인덱스와 선형 인덱스 간 변환을위한 유틸리티를 제공합니다. 다차원 인덱스에는 각 차원에 대한 int64 인덱스가 포함됩니다. 선형 인덱스는 단일 int64 값으로, 배열을 보유한 버퍼로 인덱스합니다. 모양과 레이아웃의 작성 및 조작을 단순화하는 유틸리티는 동일한 디렉토리에있는 shape_util.hlayout_util.h 를 참조하십시오.