Katedra informatiky a výpočetní techniky České vysoké učení technické, fakulta elektrotechnická Ing. Tomáš Zahradnický doc. Ing. Róbert Lórencz, CSc. 10. prosince 2007
Pamět ové banky S výhodou používáme pamět s prokládaným cyklem pro urychlení přístupu. Současně se tak čte z n pamět ových bank a rychlost čtení je tedy cca n násobná. Rychlost čtení je také ovlivněna střídou. Příklad: Uvažujme pamět se 4 bankami s prokládaným cyklem obsahující vektor V se střídou (stride) s = 7. 1. Naznačte umístění prvních čtyř složek vektoru v pamět ových bankách, pokud je složka V [0] umístěna v modulu č. 2. 2. Napište formuli určující číslo pamět ového modulu, ve kterém bude umístěna složka V [i] (moduly jsou číslovány od 0).
Pamět ové banky, pokračování Řešení: 1. Viz obrázek. Každý prvek vektoru V [i] označen včetně jeho adresy v paměti. 2. Složka V [i] má adresu a = 2 + 7i (V [0] je v bance 2 a střída je 7). Danou banku b vypočteme jako zbytek po dělení adresy a počtem bank: a b (mod 4). 2, V[0] 9, V[1] 16, V[2] 23, V[3] 30, V[4] 0 1 2 3 Obrázek: Umístění složek vektoru
Gather & Scatter I Instrukce cvi v1, r1 uloží do registru v1 takové adresy elementů délky r1, které odpovídají nastaveným bitům ve vektorovém maskovacím registru vm, 0 i vlr. Příklad: Jaký bude výsledek pro r1 = 7 a vm = 0x93. Řešení: v1 = [0, 7, 28, 49]. vm 1 0 0 1 0 0 1 1 i r1 49 42 35 28 21 14 7 0 vm[i] i r1 49 0 0 28 0 0 7 0 Poznámka: Tento příklad očekává pamět orientovanou po bytech. Normálně bývá velikost prvku mocninou 2.
Gather & Scatter II Techniky gather a scatter slouží pro manipulaci s řídkými vektory. Pomocí těchto instrukcí lze snadno pracovat s řídkými maticemi, rozptýlenými pamět ovými strukturami, atd. žádná z uvedených instrukcí se neřídí obsahem registru vm. Gather: Instrukce lvi v1, r1, v2, provádí sběr dat a nahraje do registru v1 prvky z relativních adres, které jsou obsahem vektoru v2 bázované k r1. Vektor relativních adres lze získat například pomocí instrukce cvi. v1[i] = M [r1 + v2[i]]. Scatter: Instrukce svi r1, v2, v1 je přesným opakem instrukce lvi a slouží tedy k rozptýlení dat vektoru v1 na adresy specifikované elementy vektoru v2. M [r1 + v2[i]] = v1[i].
Gather & Scatter III Příklad: Nahrajte do registru v1 prvky hlavní diagonály čtvercové matice A dimenze 4 uložené v paměti M s počáteční adresou v r2. Prvky matice jsou celá čísla a každé z nich zabírá 4 bajty. Řešení: Prvky, které chceme mají indexy 0, 5, 10 a 15 a to odpovídá maskovacímu vektoru vm = 0x8421. Vygenerujeme adresy prvků a použijeme instrukci lvi k načtení diagonály. 1. Nastavíme registr masky vm na hodnotu 0x8421. 2. Nastavíme registr r1 na hodnotu 4 (délka jednoho elementu). 3. Použijeme instrukci cvi v1, r1 na výpočet relativních adres prvků odpovídajících masce. 4. Použijeme instrukci lvi v2, r2, v1 k načtení těchto prvků.
Špetka terminologie Iniciační interval (startup): čas potřebný k nastartování dané jednotky. Na konci iniciačního intervalu je již k dispozici jeden výsledek. Konvoj: Množina vektorových instrukcí, které se mohou začít vykonávat v tom samém čase (bez strukturálních nebo datových hazardů), konvoje se nepřekrývají. Chime: Přibližný čas pro vektorovou operaci. Chaining: Výstup jedné jednotky je pipelineován rovnou na vstup druhé.
DLXV DAXPY Příklad: Vektory X a Y mají délku 64 prvků. Mějme smyčku DAXPY. Iniciační intervaly jednotlivých jednotek jsou: jednotka L/S 11 taktů; sčítačka 5 taktů; násobička 6 taktů. Dále předpokládejme, že vektorové funkční jednotky generují nebo konzumují jeden prvek operandu každý takt. 1. Rozdělte instrukce do konvojů. L/S jednotka je schopna pouze jednoho přístupu do paměti a máme pouze jednu násobičku. Proved te s a bez použití chainingu. 2. Nakreslete diagram zpracování a spočtěte kolik taktů připadá na výpočet jednoho prvku výsledného vektoru. 3. Určete konfiguraci DLXV aby se dal program provést jako jediný konvoj.
DLXV DAXPY, pokračování I 1. Rozdělení do konvojů: 4, protože 3 L/S instrukce 2. Výpočet a graf Startup Výpočet Bez chainingu 74 74 lv v1, (rx) multsv v2, f0, v1 lv v3, (ry) addv v1, v2, v3 sv (ry), v1 68 74 11 63 6 63 11 63 5 63 11 63 cyc CPU = 74 + 74 + 68 + 74 = 290 To činí průměrně 290/64 =. 4.53 taktů na element.
DLXV DAXPY, pokračování II S chainingem Vzhledem k tomu, že smyčka DAXPY obsahuje 3 L/S instrukce a máme k dispozici pouze jednu LS jednotku, musíme ji rozdělit do 3 konvojů následujícím způsobem: 80 79 74 11 63 6 63 11 63 5 63 cyc CPU = 80 + 79 + 74 = 233 11 63 Průměrně 233/64. = 3.64 taktů na element.
DLXV DAXPY, pokračování III 3. Návrh vylepšení DLXV Vzhledem k tomu, že největší problém působí nedostatek L/S jednotek, doporučujeme tedy přidat 2 další L/S jednotky (2 L, 1 S), čímž by se mohl program provést jako jeden konvoj (a nikoliv jako 3 v případě s chainingem). Vylepšená verze s chainingem s dalšími jednotkami 96 11 11 63 6 63 63 5 63 11 63 cyc CPU = 11 + 6 + 5 + 11 + 63 = 96 Průměrně 96/64 = 1.5 taktu na element.
Úkol Příklad: Pro následující program (konfigurace viz DAXPY): 1. Rozdělte instrukce do konvojů. L/S jednotka je schopna pouze jednoho přístupu do paměti a máme pouze jednu násobičku. Proved te s a bez použití chainingu. 2. Nakreslete diagram zpracování a spočtěte kolik taktů připadá na výpočet jednoho prvku výsledného vektoru. 3. Určete konfiguraci DLXV aby se dal program provést jako jediný konvoj. lv v1, (rx) multsv v2, f0, v1 multsv v3, f1, v1 addv v4, v2, v3 sv (ry), v4
Úkol 2 I Příklad: Je dán 32-bitový procesor DLXV s jednobránovou pamětí, která je rozdělena celkem do 4 bank. Šířka každé banky je 64 bitů. Latence (vybavovací doba položky) každé banky je rovna 4 taktům procesoru DLXV. Adresové bity A(4:3) určují číslo banky. Adresové bity A(31:5) jsou přivedeny na adresní vstupy každé banky, kde každá banka má kapacitu 1 GB v organizaci 128M 64b. Poznámka: Pro jednoduchost je z každého 64b čísla zobrazeno pouze spodních 8 bitů.
Úkol 2 II A(4:3) A(31:5) 00 01 10 11 0...00000000 01 03 05 07 0...00000001 0A 0B 0C 0D 0...00000010 02 04 06 08 0...00000011 AB CD DE FF 0...00000100 AA BB A5 5A Dále je dán stav procesoru DLXV: r2 = 0x10, r3 = 0x20, r4 = 16, vlr = 8 1. Graficky znázorněte časový průběh a určete délku provádění pro instrukce: lv v0, (r2) lvws v1, (r3), r4 2. Určete obsah registrů v0 a v1 po provedení těchto instrukcí. 3. Jak může vektorový procesor číst/zapisovat data řídkých matic? 4. Jak může vektorový procesor provádět operace s vybranými složkami vektoru?
Řešení I 1. Graficky znázorněte časové průběhy a délku instrukcí. Banky jsou označeny částí adresy A(4:3): lv v0, (r2) lvws v1, (r3), r4 10 11 00 01 10 11 00 01 00 10 00 10 00 10 00 10 11 17 2. Určete obsahy registrů v0 a v1: v0 = {05, 07, 0A, 0B, 0C, 0D, 02, 04} v1 = {0A, 0C, 02, 06, AB, DE, AA, A5}
Řešení II 3. Jak může vektorový procesor číst/zapisovat data řídkých matic? Data řídkých matic lze číst/zapisovat pomocí operací scatter&gather tedy pomocí instrukcí lvws a svws. 4. Jak může vektorový procesor provádět operace s vybranými složkami vektoru? Nad vybranými složkami lze pracovat pomocí maskování viz instrukce lvi a svi.