Karolara ayrılmış düzen


Şekil 1

Şekil 1'de, bir F32[3,5] dizisinin 2x2 karolarla nasıl belleğe yerleştirildiği gösterilmektedir. Bu düzene sahip bir şekil F32[3,5]{1,0:T(2,2)} şeklinde yazılır. Burada 1,0,boyutların fiziksel sırası (Düzen'de minor_to_major alanı) ile ilişkilidir. İki nokta üst üste işaretinden sonraki (2,2) ise fiziksel boyutların 2x2 boyutlu bir karoyla döşendiğini gösterir.

Döşemeler, şekli tamamen kaplayacak şekilde yerleştirilir ve daha sonra, yukarıdaki örnekte olduğu gibi her bir karo içine parçalar yerleştirilmeden yerleştirilir. Bu örnekte, örneğin sağ kısmı bellekteki düzeni gösterir ve orijinal dizi sınırları düz olmasa da eksiksiz 2x2 karolara sahip olmak için eklenen beyaz dolgu öğeleri dahil edilir.

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

Bir şekil ve döşeme verilen parçaya ilişkin doğrusal dizin formülleri

Parça olmadan, d=(dn, dn-1, ... , d1) (d1 en küçük boyuttur) dizi sınırlarına sahip bir dizideki e=(en; en-1; ... ; e1) öğesi, pozisyonda anadan ikincil boyuta göre yerleştirilir:

doğrusal_dizin(e; d)
= doğrusal_dizin((en; en-1; ... , e1), (dn, dn-1, ... , d1))
= endn-1...d1 + en-1gn-1

Bu belgedeki gösterim basitliği için bir parçanın, diziyle aynı sayıda boyuta sahip olduğunu varsayıyoruz. XLA'nın döşeme uygulamasında bu, başlangıçtaki en ana boyutları değiştirmeden ve döşeme yalnızca en küçük boyutlara uygulanarak daha az boyutlu döşemelere genellenir. Böylece, belirtilen karoda, döşenilen şeklin fiziksel boyutlarına ilişkin bir son ek belirtilir.

Boyut parçaları (tn, tn-1, ... , t1) kullanıldığında, dizideki dizin içeren bir öğe (en, en-1, ... , e1) son düzende şu konuma eşlenir:

linear_index_with_tile(e, d, ⌈ n-dizin..., n-dn-dizin, n_nn n-dizin,n-dn n-d n-d


Düzen iki parçaya sahip olarak düşünülebilir: (⌊en/tn⌋, ... , ⌊e1/t1⌋); (⌈dn/tn⌉, ... , ⌈dn⌉, ... , ≈t11 içinde) Tavan işlevi ⌈di/ti⌉ içinde görünür, çünkü karolar daha büyük dizinin sınırlarını aşarsa Şekil 1'deki gibi dolgu eklenir. Hem karolar hem de döşemelerin içindeki öğeler, döşemesiz, tekrarlı olarak yerleştirilir.

Şekil 1'deki örnekte, öğe (2,3) bileşeni (1,1,0,1) birleşik koordinat vektörü için karo dizinine (1,1) ve parça içi dizinine (0,1) sahiptir. Parça dizinlerinde sınırlar (2,3) bulunur ve karonun kendisi (2,3,2,2) birleşik vektörü için (2,2) olur. Mantıksal biçimde dizini (2,3) olan öğenin döşemeli doğrusal dizin, o zaman

lineer_index_with_tile((2;3); (3;5); (2;2))
= doğrusal_endek((1;1;0;1); (2;3;2;2))
= doğrusal_dizin((1;1), (2,3)) bilgilere 2 başvuru 2 + + 1 (0;1);
3,2

Tampon-yeniden şekillendirme-ters çevirme olarak karolara ayırma

Döşemeye dayalı düzen şu şekilde çalışır:
Bir boyut dizisi kullanmayı düşünün (dn, dn-1, ... , d1) (d1 en küçük boyuttur). Boyutlu döşeme (tn, tn-1, ... , t1) (t1 en küçük boyuttur) ile yerleştirildiğinde, bu döşeme aşağıdaki şekilde dolguyla yeniden şekillenmesiyle açıklanabilir.

  1. Dizi, (⌈dn/tn⌉ özentn, ... , ⌈d1/t1⌉ özen1) ile doldurulur.
  2. Her boyut i, (⌈di/ti⌉, ti), yani dizi şeklinde yeniden biçimlendirilir. Yani dizi,
    (⌈dn/tn⌉, tn, ... , ⌈d1/t1⌉, t1) olarak yeniden biçimlendirilir.
    Bu yeniden şekillendirmede fiziksel bir düzen değişikliği yoktur, bu nedenle bu yeni şekil biraz uçuk bir görüntüye sahiptir. Kişi açıkça bir döşeme üzerinde düşünmüyorsa bu yeniden şekil, dolgulu şekille aynı sayıda öğeye sahip herhangi bir şekli ifade edebilir. Buradaki örnek, bir karonun bu şekilde nasıl ifade edileceğini göstermektedir.
  3. Ters çevirme, tn, ... , t1'in göreli sıralarını korurken en küçük boyutlara taşınmasıyla gerçekleşir. Böylece boyutların en büyükden en küçüğe doğru sıralaması
    olur (⌈dn/tn⌉, ... , ⌈d1/t1⌈d1/t1⌉, 1n).n

Son şekil, her boyuttaki karo sayısını açıklayan
(⌈dn/tn⌉, ... , ⌈d1/t1⌉) ön ekine sahiptir. Dizideki bir öğe (en, ... , e1), son şekilde bu öğeye eşlenir:
(⌊en/tn⌋, ... , ⌊e0/t0⌋, en mod tn, ... , e1 mod). Öğenin doğrusal dizininin yukarıdaki formülü beklendiği gibi takip ettiğini görmek kolaydır.

Tekrarlanan parçalar

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


Şekil 2

Şekil 2'de, 4x8 boyutundaki bir dizinin iki döşeme düzeyiyle (ilk 2x4, sonra 2x1) nasıl döşendiği gösterilmiştir. Bu tekrarlanan parçayı (2,4)(2,1) olarak temsil ederiz. Her renk 2x4 boyutunda bir karo ve her kırmızı kenarlık kutusu 2x1 karo anlamına gelir. Sayılar, söz konusu öğenin belleğindeki doğrusal dizini parçalı biçimde gösterir. Bu biçim, ilk karonun daha büyük olması dışında TPU'da BF16 için kullanılan biçimle eşleşir. Tek farkı, parçanın (8,128)(2,1) 2x1 değerinde olması. 2x1 ile ikinci parçalamanın amacı, TPU'nun mimarisiyle uyumlu bir şekilde tek bir 32 bit değer oluşturmak üzere iki 16 bit değeri toplamaktır.

İkinci veya sonraki bir bloğun, her iki parça içi küçük boyuta da işaret edebileceğini unutmayın. Bu küçük parça, bu örnekte olduğu gibi sadece parça içindeki verileri yeniden düzenler (8,128)(2,1), ancak önceki parçadaki ana karo boyutlarına da işaret edebilir.

Karoları kullanarak boyutları birleştirme

XLA'nın döşemeleri, boyutları birleştirmeyi de destekler. Örneğin, (2,3) ile döşemeden önce, F32[2,7,8,11,10]{4,3,2,1,0} içindeki boyutları F32[112,110]{1,0} ile birleştirebilir. Kullanılan karo (∗,∗,2,∗,3) şeklindedir. Burada, bloktaki yıldız işareti, söz konusu boyutu alıp bir sonraki küçük boyutla birleştirildiği anlamına gelir. Birden çok komşu boyut birlikte tek bir boyut altında toplanabilir. Dahil edilen bir boyut, karonun ilgili boyutunda -1 olan bir parça değeriyle temsil edilir. Bu değer, bir parçada boyut boyutu olarak başka şekilde geçerli değildir.

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