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

Döşenmiş düzen

Şekil 1

Şekil 1, Fx2 [3,5] dizisinin 2x2 döşeme ile bellekte nasıl düzenlendiğini göstermektedir. Bu düzene sahip bir şekil, F32 [3,5] {1,0: (2,2)} şeklinde yazılır; burada 1,0, boyutların fiziksel sırasıyla (Mizanpaj'daki minor_to_major alanı) ve (2,2) iki nokta üst üste fiziksel boyutların 2x2 kiremitle döşenmesini gösterir.

Sezgisel olarak döşemeler şekli kaplayacak şekilde yerleştirilir ve daha sonra her bir döşemenin içinde, yukarıdaki örnekte olduğu gibi öğelerin döşenmeden döşenmesi sağlanır; burada örneğin sağdaki kısım, eklenen beyaz dolgu elemanları da dahil olmak üzere bellekteki düzeni gösterir Orijinal dizi sınırları eşit olmasa bile tam 2x2 döşemeye sahip olmak için.

Dolgudaki ekstra elemanların belirli bir değer içermesi gerekmez.

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

Döşeme olmadan, d = (d n , d n-1 , ..., d 1 ) dizi sınırlarına sahip bir dizideki e = (e n , e n-1 , ..., e 1 ) öğesi (d1, en küçük boyut) büyükler tarafından konumdaki küçük düzene göre düzenlenir:

linear_index (e, d)
= doğrusal_indeks ((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, başlangıçtaki en büyük boyutları değiştirmeden ve döşemeyi yalnızca en küçük boyutlara uygulayarak daha az boyuttaki eğimlere genelleme yapılır, böylece belirtilen döşeme, şekil döşenir.

Boyut döşemesi (t n , t n-1 , ..., t 1 ) kullanıldığında, dizindeki indekslere (e n , e n-1 , ..., e 1 ) sahip bir öğe buna eşlenir son yerleşimdeki konumu:

linear_index_with_tile (e, d, t)
= linear_index ((⌊e / t⌋, e mod t), (⌈d / t⌉, t)) (aritmetik elemandır, (a, b) birleştirme)
= linear_index ((ne n / t n ⌋, ..., 1e 1 / t 1 ⌋, e n mod t n , ..., e 1 mod t 1 ), (nd n / t n ⌉, ..., 1d 1 / t 1 ⌉, t n , t n-1 , ..., t 1 ))
= linear_index ((ne n / t n ⌋, ..., 1e 1 / t 1 ⌋), (nd n / t n ⌉, ..., 1d 1 / t 1 ⌉)) ∙ t n t n-1 ... t 1 + linear_index ((e n mod t n , ..., e 1 mod t 1 ), (t n , t n-1 , ..., t 1 ))

Düzenin iki bölümden oluştuğu düşünülebilir: (ne n / t n ⌋, ..., 1e 1 / t 1 ⌋), bir dizi boyut döşemesindeki karo dizinine karşılık gelir (nd n / t n ⌉, ..., 1d 1 / t 1 ⌉) ve (e n mod t n , ..., e 1 mod t 1 ). Tavan işlevi id i / t i appears'de görünür, çünkü fayanslar daha büyük dizinin sınırlarını aşarsa, dolgu Şekil 1'deki gibi eklenir. Fayanslardaki hem fayanslar hem de elemanlar yinelemeli olarak döşenir.

Şekil 1'deki örnek için, eleman (2,3) (1, 1, 0, 1) 'in birleşik koordinat vektörü için karo dizinine (1,1) ve karo içi dizinine (0,1) sahiptir. Karo indeksleri sınırlara (2, 3) sahiptir ve karonun kendisi (2, 3, 2, 2) 'nin birleşik vektörü için (2, 2)' dir. Mantıksal şekildeki indeksli (2, 3) eleman için döşemeli doğrusal indeks

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

Ped-yeniden şekillendirme-devrik olarak döşeme

Döşeme tabanlı düzen aşağıdaki gibi çalışır:
Bir boyut dizisini düşünün (d n , d n-1 , ..., d1) (d1 en küçük boyuttur). Boyut döşemesi (t n , t n-1 , ..., t 1 ) (t 1 en küçük boyuttur) ile döşendiğinde, döşeme aşağıdaki şekilde yeniden şekillendirme-devrik olarak tanımlanabilir yol.

  1. Dizi (⌈d n / t n ⌉ ∙ t n , ..., ⌈d 1 / t 1 ⌉ ∙ t 1 ) ile doldurulur.
  2. Her boyut i (id i / t i ⌉, t i ) olarak ayrılır, yani dizi şu şekilde yeniden şekillendirilir:
    (Nd n / t n ⌉, t n , ..., 1d 1 / t 1 ⌉, t 1 ).
    Bu yeniden şekillendirmede tek başına fiziksel düzen değişikliği yoktur, bu nedenle bu yeniden şekillendirme bir bit yayınıdır. Biri açık bir şekilde bir fayans düşünmüyorsa, bu yeniden şekillendirme, yastıklı şekille 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, göreli sıralarını korurken t n , ..., t 1 ' i en küçük boyutlara taşıyarak gerçekleşir, böylece boyutların sırası en büyükten en küçük olana
    (Nd n / t n ⌉, ..., 1d 1 / t 1 ⌉, t n , ..., t 1 ).

Son şeklin öneki vardır
(Nd n / t n ⌉, ..., ⌈d 1 / t 1 ⌉), her boyuttaki döşemelerin sayısını tanımlar. Dizideki bir öğe (e n , ..., e 1 ) bu öğeyle son şekilde eşlenir:
(Ne n / t n ⌋, ..., 0e 0 / t 0 ⌋, e n mod t n , ..., e 1 mod t 1 ). Elemanın doğrusal indeksinin yukarıdaki formülü beklendiği gibi takip ettiğini görmek kolaydır.

Tekrarlanan döşeme

XLA'nın döşemesi tekrar tekrar uygulanarak daha da esnek hale gelir.

şekil 2

Şekil 2, 4x8 boyutundaki bir dizinin iki döşeme seviyesiyle nasıl döşendiğini göstermektedir (önce 2x4 sonra 2x1). Bu tekrarlanan döşemeyi (2,4) (2,1) olarak temsil ediyoruz. Her renk 2x4 döşemeyi gösterir ve her kırmızı kenarlık kutusu 2x1 döşemedir. Sayılar, döşenmiş biçimde o öğenin belleğindeki doğrusal dizini gösterir. Bu biçim, TPU'daki BF16 için kullanılan formatla eşleşir, ancak ilk karo daha büyüktür, yani döşeme (8.128) (2,1) 'dir, burada 2x1 ile ikinci döşemenin amacı iki 16 bit değeri toplamaktır. bir TPU mimarisine uygun şekilde bir 32 bit değer oluşturur.

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

Döşemeleri kullanarak boyutları birleştirme

XLA'nın döşemesi, boyutları birleştirmeyi de destekler. Örneğin, F32 [2,7,8,11,10] {4,3,2,1,0} içindeki boyutları, (2,3) ile döşemeden önce F32 [112,110] {1,0} ile birleştirebilir. ). Kullanılan karo (∗, ∗, 2, ∗, 3) şeklindedir. Burada bir döşemedeki yıldız işareti, bu boyutu almayı ve onu bir sonraki daha küçük boyutla birleştirmeyi ima eder. Birden fazla bitişik boyut birlikte bir boyuta toplanabilir. Toplam boyut, döşemenin boyut boyutu olarak aksi halde geçerli olmayan, döşemenin bu boyutunda -1 döşeme değeriyle temsil edilir.

Daha kesin olarak, şeklin i boyutu karodaki bir yıldız işareti ile elimine edilirse, o zaman önceki döşeme tanımı uygulanmadan önce, bu boyut hem döşenen şekilden hem de karo vektöründen ve i-1 boyutundan çıkarılır şeklinin dizisi d i-1'den d i d i-1'e yükseltildi. Bu adım, karo vektöründeki her yıldız için tekrarlanır.