Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Döşenmiş düzen

Şekil 1

Şekil 1, bir F32 [3,5] dizisinin 2x2 döşeme ile belleğe nasıl yerleştirildiğini gösterir. Bu düzene sahip bir şekil F32 [3,5] {1,0: T (2,2)} olarak yazılır; burada 1,0, boyutların fiziksel düzeniyle ilgilidir (Düzende minor_to_major alanı) iken (2,2) iki nokta üst üste işaretinden sonra fiziksel boyutların 2x2 karo ile döşenmesi gösterilir.

Sezgisel olarak döşemeler şekli kaplayacak şekilde yerleştirilir ve daha sonra, yukarıdaki örnekte olduğu gibi öğeler döşeme olmadan yerleştirilir; burada örneğin sağ kısmı, eklenen beyaz dolgu öğeleri dahil olmak üzere bellekteki düzeni gösterir. Orijinal dizi sınırları eşit olmasa bile tam 2x2 karolara sahip olmak için.

Dolgudaki ekstra öğelerin belirli bir değer içermesi gerekmez.

Bir şekil ve bir döşeme verilen döşeme için doğrusal dizin formülleri

Döşeme olmadan, d = (d n , d n-1 , ..., d 1 ) (d1) dizi sınırlarına sahip bir dizide bir e = (e n , e n-1 , ..., e 1 ) öğesi en küçük boyut), konumdaki büyükten küçüğe doğru sıralanır:

doğrusal_indis (e, d)
= doğrusal_indis ((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

Bu belgedeki gösterimin basitliği için, bir döşemenin diziyle aynı sayıda boyuta sahip olduğunu varsayıyoruz. XLA'nın döşeme uygulamasında, bu, başlangıçtaki en büyük boyutları değiştirmeden bırakarak ve döşemeyi yalnızca en küçük boyutlara uygulayarak, daha az boyuta sahip döşemelere genelleştirilir; kiremitli şekli.

Boyut döşeme (t n , t n-1 , ..., t 1 ) kullanıldığında, dizideki indisli bir öğe (e n , e n-1 , ..., e 1 ) buna eşlenir son düzendeki konum:

linear_index_with_tile (e, d, t)
= lineer_index ((⌊e / t⌋, e mod t), (⌈d / t⌉, t)) (aritmetik elementseldir, (a, b) birleştirmedir)
= doğrusal_indis ((⌊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 ))
= doğrusal_indis ((⌊e n / t n ⌋, ..., ⌊e 1 / t 1 ⌋), (⌈d n / t n ⌉, ..., ⌈d 1 / t 1 ⌉)) ∙ t n t n-1 ... t 1 + doğrusal_indis ((e n mod t n , ..., e 1 mod t 1 ), (t n , t n-1 , ..., t 1 ))

Düzen, iki bölümden oluşuyor olarak düşünülebilir: (⌊e n / t n ⌋, ..., ⌊e 1 / t 1 ⌋), bu, boyuttaki bir karo dizisindeki karo indeksine karşılık gelir (⌈d n / t n ⌉, ..., ⌈d 1 / t 1 ⌉) ve (e n mod t n , ..., e 1 mod t 1 ), ki bu bir kiremit içi indekse karşılık gelir. Tavan işlevi ⌈d i / t i ⌉'de görünür çünkü döşemeler daha büyük dizinin sınırlarını aşarsa, dolgu Şekil 1'deki gibi eklenir. Döşemelerin içindeki hem döşemeler hem de öğeler döşeme olmadan yinelemeli olarak yerleştirilir.

Şekil 1'deki örnek için, (2,3) öğesinin (1, 1, 0, 1) birleşik koordinat vektörü için karo indeksi (1,1) ve karo içi indeksi (0,1) vardır. Karo endekslerinin sınırları (2, 3) vardır ve döşemenin kendisi (2, 3, 2, 2) 'nin birleşik vektörü için (2, 2)' dir. Mantıksal şekilde indeksi (2, 3) olan eleman için döşemeli doğrusal indeks,

linear_index_with_tile ((2,3), (3,5), (2,2))
= doğrusal_indis ((1,1,0,1), (2,3,2,2))
= lineer_index ((1,1), (2,3)) ∙ 2 ∙ 2 + lineer_index ((0,1), (2,2))
= (1 ∙ 3 + 1) ∙ 2 ∙ 2 + (0 ∙ 2 + 1)
= 17.

Pad-reshape-transpose olarak döşeme

Döşeme tabanlı düzen şu şekilde çalışır:
Bir boyut dizisi düşünün (d n , d n-1 , ..., d1) (d1 en küçük boyuttur). Boyut döşeme ile yerleştirildiğinde (t n , t n-1 , ..., t 1 ) (t 1 en küçük boyuttur), bu döşeme aşağıda pad-reshape-transpoze olarak tanımlanabilir. yol.

  1. Dizi (⌈d n / t n ⌉ ∙ t n , ..., ⌈d 1 / t 1 ⌉ ∙ t 1 ) şeklinde doldurulur.
  2. Her boyut i'ye bölünür (⌈d i / t i ⌉, t i ), yani dizi şu şekilde yeniden şekillendirilir:
    (⌈D n / t n ⌉, t n , ..., ⌈d 1 / t 1 ⌉, t 1 ).
    Bu yeniden şekillendirmede fiziksel bir düzen değişikliği yoktur, bu nedenle bu yeniden şekillendirme bir bitcast'tir. Biri açıkça bir döşeme düşünmüyorsa, bu yeniden şekillendirme, yastıklı şekil ile aynı sayıda öğeye sahip herhangi bir şekli ifade edebilir - buradaki örnek, bir döşemenin bu şekilde nasıl ifade edileceğidir.
  3. Bir devrik, t n , ..., t 1'i göreceli sırasını korurken en küçük boyutlara hareket ettirerek gerçekleşir, böylece boyutların en büyükten en küçüğe sıralaması olur
    (⌈D n / t n ⌉, ..., ⌈d 1 / t 1 ⌉, t n , ..., t 1 ).

Son şeklin öneki vardır
(⌈D n / t n ⌉, ..., ⌈d 1 / t 1 ⌉), her boyuttaki karo sayısını tanımlar. Dizideki bir öğe (e n , ..., e 1 ), son şeklinde bu öğeye eşlenir:
(⌊E n / t n ⌋, ..., ⌊e 0 / t 0 ⌋, e n mod t n , ..., e 1 mod t 1 ). Öğenin doğrusal indeksinin beklendiği gibi yukarıdaki formülü takip ettiğini görmek kolaydır.

Tekrarlanan döşeme

XLA'nın döşeme, tekrar tekrar uygulandığında daha da esnek hale gelir.

şekil 2

Şekil 2, 4x8 boyutundaki bir dizinin iki döşeme seviyesiyle (önce 2x4 sonra 2x1) nasıl döşendiğini göstermektedir. Bu tekrarlanan döşemeyi (2,4) (2,1) olarak temsil ediyoruz. Her bir renk 2x4 kareyi belirtir ve her kırmızı kenarlık kutusu 2x1 karodur. Sayılar, döşemeli formatta bu öğenin belleğindeki doğrusal indeksi gösterir. Bu biçim, TPU'da BF16 için kullanılan biçimle eşleşir, ancak ilk döşemenin daha büyük olması, yani döşemenin (8,128) (2,1) olmasıdır; burada 2x1 ile ikinci döşemenin amacı, iki 16 bit değeri birlikte toplamaktır. TPU mimarisiyle uyumlu bir şekilde 32 bitlik bir değer oluşturun.

İkinci veya sonraki bir döşemenin, bu örnekte (8,128) (2,1) ile olduğu gibi, döşemedeki verileri yeniden düzenleyen hem küçük döşeme içi boyutlarına atıfta bulunabileceğini hem de ana çapraz döşemeye de başvurabileceğini unutmayın. önceki döşemeden boyutlar.

Fayans kullanarak boyutları birleştirme

XLA'nın döşemesi aynı zamanda birleştirme boyutlarını da destekler. Örneğin, F32 [2,7,8,11,10] {4,3,2,1,0} 'deki boyutları F32 [112,110] {1,0} ile birleştirmeden önce ilk olarak (2,3 ). Kullanılan karo (∗, ∗, 2, ∗, 3). Burada bir döşemedeki yıldız işareti, bu boyutu alıp bir sonraki daha küçük boyutla birleştirmeyi ifade eder. Birden çok bitişik boyut, birlikte tek bir boyutta toplanabilir. İçerilen bir boyut, döşemenin bu boyutunda -1'lik bir döşeme değeriyle temsil edilir; bu, bir döşemede boyut boyutu olarak başka şekilde geçerli değildir.

Daha kesin olarak, şeklin boyutu i karodaki bir yıldız işaretiyle ortadan kaldırılırsa, önceki döşeme tanımı uygulanmadan önce, bu boyut hem döşenmekte olan şekilden hem de karo vektöründen kaldırılır ve boyut i-1 nedir? şeklin dizi sınırı d i-1'den d i d i-1'e yükseltilmiştir. Bu adım, karo vektöründeki her yıldız işareti için tekrarlanır.