이 페이지는 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 타일을 가지고 있습니다.

패딩의 추가 요소는 특정 값을 포함 할 필요가 없습니다.

타일에 대한 선형 지수 공식은 모양과 타일을 제공

배열 범위 D의, 소자 E = 타일링없이 (d는 N, D, N-1, ..., D (1)) (D1은 = 배열 (E, N, 즉, N-1, ..., (1) E) 가장 작은 치수)는 위치에 작은 순서에 주요으로 배치된다

linear_index (E, d)
linear_index = ((E 않음,N-1, ..., E 1), (D, N, D, N-1, ..., D (1)))
E = N D N-1 ... D 1 + E D N-1, N-2 ... D 1 + ... + 예 1

이 문서에 표기의 단순화하기 위해 우리는 타일 배열과 크기의 같은 번호가 가정합니다. 타일의 XLA의 구현에서는이 변경되지 않은 초기의 가장 중요한 차원을 떠나 지정된 타일이의 물리적 크기의 접미사를 언급 그래서는 가장 작은 크기에만 타일링 적용하여 적은 치수 타일링에 일반화 타일되고있는 모양입니다.

크기 타일링 때 (t n을 t N-1, ..., t (1))를 사용하고, 인덱스와 배열의 요소 (E, N, 즉, N-1, ..., E 1)이 맵핑되고 최종 레이아웃의 위치 :

linear_index_with_tile (E, D, t)
linear_index = ((⌊e / t⌋, 전자의 MOD t) (⌈d / t⌉, t)의) (산술) elementwise (A, B를 연결 한 것이다)
linear_index = ((⌊e N / N ⌋ t, ... ⌊e 1 / t 1 ⌋, 예컨대 N 개조 t N, ..., 개조 예 1 t 1), (⌈d N / N ⌉ t, ... ⌈d 1 / 1 ⌉ t, t, N, N t-1, ..., t (1)))
linear_index = ((⌊e N / N ⌋ t, ... ⌊e 1 / t ⌋ 1), (⌈d N / N ⌉ t, ... ⌈d 1 / 1 ⌉ t)) t N ∙ t N-1 ... t + 1 linear_index ((E t 개조 N, N, ..., 개조 예 1 t 1), (t, N, N t-1, ..., t (1)))

레이아웃을 갖는 두 부분으로 생각 될 수있다 : (⌋ ⌊e / t를 N, N, ..., ⌊e 1 / t ⌋ 1) 크기의 타일들의 어레이의 타일 인덱스에 대응하는 (N ⌈d / t ⌉ N, ..., ⌈d 1 / t ⌉ 1) 및 (E t 개조 N, N, ..., 개조 예 1 t 1), 이는 내 타일 인덱스에 대응한다. ⌈d I의 CEIL 함수 나타날 / t I ⌉ 타일은 큰 어레이의 경계를 오버런하는 경우 패딩 타일링없이 반복적으로 배치되어도 1 모두 타일 및 타일 내의 요소로 삽입되어 있기 때문이다.

도 1의 예를 들어, 요소 (2,3)는 타일 인덱스 (1,1), 및 내 타일 인덱스 (0,1)이 (1, 1, 0, 1)의 좌표 결합 벡터. 타일 ​​인덱스는 경계 (2, 3)을 가지며, 타일 자체 (2, 3, 2, 2)의 결합 벡터 (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 ∙ linear_index 2 + ((0,1), (2,2))
= (1 + 1 ∙ 3) ∙ 2 ∙ 2 + (0 ∙ 2 + 1)
= 17.

패드 모양 변경 - 전치으로 타일링

다음과 같이 타일링 기반의 레이아웃 동작합니다
차원 배열 고려 (d의 N, D, N-1, ..., D1) (D1 가장 작은 치수이다). 그것은 크기의 바둑판에 배치 때 (t의 N, T, N-1, ..., t 1) (t 1은 가장 작은 치수이다), 그 타일은 다음에 패드 모양 변경 - 트랜스의 관점에서 설명 될 수있다 방법.

  1. 이 배열은 (⌈d N / N t ⌉ ∙ t N, ..., ⌈d 1 / t ⌉ ∙ 1 t 1)로 채워진다.
  2. 각 치수는 난 (⌈d I / t 난 ⌉ 난에서 t), 즉, 배열로 재 성형된다 나눠진다
    (⌈d N / N ⌉ t, t N, ..., ⌈d 1 / 1 ⌉ t, t (1)).
    이 모양 변경이 bitcast 그래서 그 자체로이 모양 변경의 물리적 레이아웃 변경은 없다. 하나는 명시 적으로 타일링 생각되어 있지 않은 경우,이 모양 변경이 패딩 모양 같은 수의 요소와 어떤 모양을 표현할 수있다 - 여기 예제는이 방법으로 타일을 표현하는 방법이다.
  3. 전치는 t의 n이, ..., 가장 작은 치수로 1 t, 상대적인 순서를 유지하면서 매우 작은 대부분의 가장 큰 치수에서의 순서가되도록 이동시킴으로써 일어나는
    (⌈d N / N ⌉ t, ... ⌈d 1 / 1 ⌉ t, t N, ..., t (1)).

마지막 모양은 접두사가 있습니다
(⌈d N / t는 N ⌉, ... ⌈d 1 / t ⌉ 1), 각 차원의 타일의 수를 설명한다. 어레이의 소자 (전자는 N, ..., 예 1) 최종 형상이 요소에 매핑된다 :
(⌊e N / N ⌋ t, ..., 0 ⌊e / t 0 ⌋, 예컨대 N 개조 t N, ..., 개조 예 1 t 1). 요소의 선형 지수 예상대로 상기 식을 따르는 것을 쉽게 알 수있다.

반복 기와

XLA의 타일링은 더욱 유연한 반복적으로 적용하여이된다.

그림 2

도 크기의 4x8 배열이 (다음 2 × 제 2 × 4)를 바둑판 두 레벨로 타일링 방법 2 나타낸다. 우리는 (2,4) (2,1) 등이 반복 타일링을 나타냅니다. 각 색상은 2 × 타일을 나타내며 각각 빨간색 테두리 상자는 2 × 타일입니다. 숫자는 바둑판 형태의 해당 요소의 메모리에 선 지수를 나타낸다. 이 포맷은 2 × 의해 제 2 타일의 목적에 두 개의 16 비트 값을 수집하는 TPU에 BF16 사용되는 포맷, 즉 타일이 처음 타일이 크다고 (8128)를하기 (2,1), 일치 하나 개의 방법으로 32 비트 값을 형성하는 TPU의 구조에 맞춰.

두 번째 또는 그 이후의 타일 막 (8128) (2,1)이 예와 같이, 타일 내에 데이터를 재배 열하는 모두 부 내의 타일 치수를 참조 할뿐만 아니라, 주요 교차 타일을 참조 할 수 있습니다 종래의 차원 타일링.

타일을 결합하여 치수

XLA의 기와는 차원을 통합 지원합니다. 예를 들어, F32는 치수를 결합 할 수있다 [2,7,8,11,10] F32로 {4,3,2,1,0} [112,110] {1,0}과 제 타일링 전에 (2,3- ). 사용 된 타일은 (*, * 2, * 3). 다음은 타일에 별표 (*)는 그 차원을 복용하고 다음 더 미성년자 차원과 결합을 의미한다. 인접한 여러 치수는 하나의 치수에 함께 포섭 될 수있다. 포섭 치수 차원 크기 타일에 달리 유효하지 않은 타일의 치수 -1 타일 값으로 표현된다.

형상 I 차원 타일에 별표를 통해 제거되는 경우 타일링의 사전 정의가 적용되기 전에보다 정확하게는, 다음에, 그 치수 모두에서 기와되는 형상 및 타일 벡터를 제거하고, 치수가 I-1 것이었다 형상 결합의 배열은 D에서 증가의 I-1 내지 D 난을-1 거라고. 이 단계는 타일 벡터의 각 별표에 대해 반복된다.