Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Tata letak ubin

Gambar 1

Gambar 1 menunjukkan bagaimana array F32 [3,5] ditata dalam memori dengan petak 2x2. Bentuk dengan tata letak ini ditulis sebagai F32 [3,5] {1,0: T (2,2)}, di mana 1,0 berkaitan dengan urutan fisik dimensi (bidang minor_to_major dalam Tata Letak) sedangkan (2,2) setelah titik dua menunjukkan pengubinan dimensi fisik dengan ubin 2x2.

Ubin secara intuitif ditata untuk menutupi bentuk dan kemudian di dalam setiap ubin, elemen kemudian ditata tanpa ubin, seperti pada contoh di atas, di mana bagian kanan dari contoh menunjukkan tata letak dalam memori, termasuk elemen padding putih yang ditambahkan untuk memiliki ubin 2x2 lengkap meskipun batas larik asli tidak genap.

Elemen tambahan dalam padding tidak diharuskan mengandung nilai tertentu.

Rumus indeks linier untuk petak diberi bentuk dan petak

Tanpa petak, elemen e = (e n , e n-1 , ..., e 1 ) dalam larik dengan batas larik d = (d n , d n-1 , ..., d 1 ) (d1 adalah dimensi paling kecil) ditata berdasarkan urutan mayor ke minor pada posisi:

indeks_linier (e, d)
= indeks_linier ((e n , e n-1 , ..., e 1 ), (d n , d n-1 , ..., d 1 ))
= e n d n-1 ... d 1 + e n-1 d n-2 ... d 1 + ... + e 1

Untuk kesederhanaan notasi dalam dokumen ini, kami menganggap ubin memiliki jumlah dimensi yang sama dengan larik. Dalam penerapan pengubinan XLA, ini digeneralisasikan ke pengereman dengan dimensi yang lebih sedikit dengan membiarkan dimensi paling utama awal tidak berubah dan menerapkan pengubinan hanya ke dimensi yang paling kecil, sehingga pengubinan yang ditentukan menyebutkan akhiran dari dimensi fisik bentuk sedang ubin.

Ketika petak ukuran (t n , t n-1 , ..., t 1 ) digunakan, elemen dalam array dengan indeks (e n , e n-1 , ..., e 1 ) dipetakan ke ini posisi dalam tata letak akhir:

indeks_linier_dengan ubin (e, d, t)
= indeks_linier ((⌊e / t⌋, e mod t), (⌈d / t⌉, t)) (aritmatika adalah elemen, (a, b) adalah penggabungan)
= indeks_linier ((⌊e n / t n ⌋, ..., ⌊e 1 / t 1 ⌋, e n mod t n , ..., e 1 mod t 1 ), (⌈d n / t n ⌉, ..., ⌈d 1 / t 1 ⌉, t n , t n-1 , ..., t 1 ))
= indeks_linier ((⌊e n / t n ⌋, ..., ⌊e 1 / t 1 ⌋), (⌈d n / t n ⌉, ..., ⌈d 1 / t 1 ⌉)) ∙ t n t n-1 ... t 1 + indeks_linier ((e n mod t n , ..., e 1 mod t 1 ), (t n , t n-1 , ..., t 1 ))

Tata letak dapat dianggap memiliki dua bagian: (⌊e n / t n ⌋, ..., ⌊e 1 / t 1 ⌋), yang sesuai dengan indeks petak dalam larik ukuran petak (⌈d n / t n ⌉, ..., ⌈d 1 / t 1 ⌉), dan (e n mod t n , ..., e 1 mod t 1 ), yang sesuai dengan indeks dalam ubin. Fungsi ceil muncul di ⌈d i / t i ⌉ karena jika petak melebihi batas dari larik yang lebih besar, padding akan disisipkan seperti pada Gambar 1. Baik petak maupun elemen di dalam petak disusun secara rekursif tanpa petak.

Untuk contoh pada Gambar 1, elemen (2,3) memiliki indeks petak (1,1), dan indeks dalam petak (0,1), untuk vektor koordinat gabungan (1, 1, 0, 1). Indeks ubin memiliki batas (2, 3) dan ubin itu sendiri adalah (2, 2) untuk vektor gabungan (2, 3, 2, 2). Indeks linier dengan ubin untuk elemen dengan indeks (2, 3) dalam bentuk logis kemudian

indeks_linier_dengan ubin ((2,3), (3,5), (2,2))
= indeks_linier ((1,1,0,1), (2,3,2,2))
= indeks_linier ((1,1), (2,3)) ∙ 2 ∙ 2 + indeks_linier ((0,1), (2,2))
= (1 ∙ 3 + 1) ∙ 2 ∙ 2 + (0 ∙ 2 + 1)
= 17.

Ubin sebagai pad-membentuk-transpose

Tata letak berbasis ubin beroperasi sebagai berikut:
Pertimbangkan array dimensi (d n , d n-1 , ..., d1) (d1 adalah dimensi paling kecil). Ketika ditata dengan ukuran ubin (t n , t n-1 , ..., t 1 ) (t 1 adalah dimensi yang paling kecil), ubin itu dapat dijelaskan dalam istilah pad-bentuk-transpose berikut ini cara.

  1. Array diisi ke (⌈d n / t n ⌉ ∙ t n , ..., ⌈d 1 / t 1 ⌉ ∙ t 1 ).
  2. Setiap dimensi i dipecah menjadi (⌈d i / t i ⌉, t i ), yaitu array dibentuk ulang menjadi
    (⌈D n / t n ⌉, t n , ..., ⌈d 1 / t 1 ⌉, t 1 ).
    Tidak ada perubahan tata letak fisik dalam pembentukan kembali ini dengan sendirinya, jadi bentuk ulang ini adalah bitcast. Jika seseorang tidak secara eksplisit memikirkan ubin, bentuk ulang ini dapat mengekspresikan bentuk apa pun dengan jumlah elemen yang sama dengan bentuk bantalan - contohnya di sini adalah cara mengekspresikan ubin dengan cara ini.
  3. Sebuah transpos terjadi dengan memindahkan t n , ..., t 1 ke dimensi yang paling kecil dengan tetap menjaga urutan relatifnya, sehingga urutan dimensi dari yang paling besar ke yang paling kecil menjadi
    (⌈D n / t n ⌉, ..., ⌈d 1 / t 1 ⌉, t n , ..., t 1 ).

Bentuk akhir memiliki awalan
(⌈D n / t n ⌉, ..., ⌈d 1 / t 1 ⌉), yang menggambarkan jumlah ubin di setiap dimensi. Sebuah elemen dalam array (e n , ..., e 1 ) dipetakan ke elemen ini dalam bentuk akhir:
(⌊E n / t n ⌋, ..., ⌊e 0 / t 0 ⌋, e n mod t n , ..., e 1 mod t 1 ). Sangat mudah untuk melihat bahwa indeks linier dari elemen mengikuti rumus di atas seperti yang diharapkan.

Ubin berulang

Ubin XLA menjadi lebih fleksibel dengan mengaplikasikannya berulang kali.

Gambar 2

Gambar 2 menunjukkan bagaimana sebuah array berukuran 4x8 disusun oleh dua tingkat ubin (pertama 2x4 lalu 2x1). Kami merepresentasikan ubin berulang ini sebagai (2,4) (2,1). Setiap warna menunjukkan ubin 2x4 dan setiap kotak perbatasan merah adalah ubin 2x1. Angka-angka tersebut menunjukkan indeks linier dalam memori elemen itu dalam format ubin. Format ini cocok dengan format yang digunakan untuk BF16 pada TPU, kecuali ubin awalnya lebih besar, yaitu ubin (8.128) (2,1), di mana tujuan dari ubin kedua oleh 2x1 adalah untuk mengumpulkan dua nilai 16 bit bersama-sama. membentuk satu nilai 32 bit dengan cara yang selaras dengan arsitektur TPU.

Perhatikan bahwa petak kedua atau yang lebih baru bisa merujuk ke kedua dimensi petak minor, yang hanya mengatur ulang data di dalam petak, seperti dalam contoh ini dengan (8.128) (2,1), tetapi juga bisa merujuk ke petak silang utama dimensi dari ubin sebelumnya.

Menggabungkan dimensi menggunakan ubin

Ubin XLA juga mendukung penggabungan dimensi. Misalnya, ia dapat menggabungkan dimensi di F32 [2,7,8,11,10] {4,3,2,1,0} menjadi F32 [112,110] {1,0} terlebih dahulu sebelum memetakannya dengan (2,3 ). Ubin yang digunakan adalah (∗, ∗, 2, ∗, 3). Di sini tanda bintang dalam ubin menyiratkan pengambilan dimensi itu dan menggabungkannya dengan dimensi yang lebih kecil berikutnya. Beberapa dimensi yang berdekatan dapat digabungkan menjadi satu dimensi. Dimensi yang disubsumsi diwakili oleh nilai petak -1 dalam dimensi petak tersebut, yang sebaliknya tidak valid dalam petak sebagai ukuran dimensi.

Lebih tepatnya, jika dimensi i dari bentuk dihilangkan melalui tanda bintang di petak, maka sebelum definisi ubin sebelumnya diterapkan, dimensi itu dihapus dari kedua bentuk yang sedang disusun dan vektor petak, dan apa yang disebut dimensi i-1 dari bentuk tersebut memiliki batas lariknya yang ditingkatkan dari d i-1 ke d i d i-1 . Langkah ini diulangi untuk setiap tanda bintang dalam vektor ubin.