Ivan Šimeček, Pavel Tvrdík

Podobné dokumenty
Procesor Intel Pentium (1) Procesor Intel Pentium (3) Procesor Intel Pentium Pro (1) Procesor Intel Pentium (2)

Jan Nekvapil ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická

Intel (2) Intel (1) Intel (3) Intel (4) Intel (6) Intel (5) Nezřetězené zpracování instrukcí:

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

OPS Paralelní systémy, seznam pojmů, klasifikace

Představení a vývoj architektur vektorových procesorů

Charakteristika dalších verzí procesorů v PC

Pohled do nitra mikroprocesoru Josef Horálek

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Paměťový podsystém počítače

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

CHARAKTERISTIKA MODERNÍCH PENTIÍ. Flynnova klasifikace paralelních systémů

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

Struktura a architektura počítačů (BI-SAP) 11

Využití ICT pro rozvoj klíčových kompetencí CZ.1.07/1.5.00/

Architektura počítačů Logické obvody

PROCESOR. Typy procesorů

Systém adresace paměti

Procesor. Procesor FPU ALU. Řadič mikrokód

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Využití ICT pro rozvoj klíčových kompetencí CZ.1.07/1.5.00/

Pamět ová hierarchie, návrh skryté paměti 2. doc. Ing. Róbert Lórencz, CSc.

Paralelní a distribuované výpočty (B4B36PDV)

Architektura počítačů Logické obvody

SUPERPOČÍTAČE DANIEL LANGR ČVUT FIT / VZLÚ

GPGPU Aplikace GPGPU. Obecné výpočty na grafických procesorech. Jan Vacata

Architektura počítačů

Přednáška. Správa paměti I. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Architektura Intel Atom

Přehled paralelních architektur. Dělení paralelních architektur Flynnova taxonomie Komunikační modely paralelních architektur

Úvod do architektur personálních počítačů

Princip funkce počítače

Datové struktury 2: Rozptylovací tabulky

Optimalizace pomocí icc/gcc - vektorizace

Cache paměť - mezipaměť

Úvod do problematiky návrhu počítačových systémů. INP 2008 FIT VUT v Brně

Technické prostředky počítačové techniky

Hardware - komponenty počítačů Von Neumannova koncepce počítače. Von Neumannova koncepce počítače

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Paralelní a distribuované výpočty (B4B36PDV)

Architektura počítače

Dynamické programování

Charakteristika dalších verzí procesorů Pentium

Operační systémy. Přednáška 7: Správa paměti I

Strojový kód. Instrukce počítače

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Aplikace metody BDDC

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Static Load Balancing Applied to Time Dependent Mechanical Problems

Operační systémy. Správa paměti (SP) Požadavky na SP. Spojování a zavedení programu. Spojování programu (linking) Zavádění programu (loading)

Architektury VLIW M. Skrbek a I. Šimeček

NSWI /2011 ZS. Principy cpypočítačůčů aoperačních systémů ARCHITEKTURA

C2115 Praktický úvod do superpočítání

Cvičení MI-PRC I. Šimeček

Blue Gene Vysoká škola báňská-technická univerzita Ostrava. Blue Gene. Karel Chrastina. Úvod. Blue Gene L. Blue Gene P.

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Katedra informatiky a výpočetní techniky. 10. prosince Ing. Tomáš Zahradnický doc. Ing. Róbert Lórencz, CSc.

Disková pole (RAID) 1

Roman Výtisk, VYT027

Architektura procesoru ARM

Architektury CISC a RISC, uplatnění v personálních počítačích - pokračování

Pokročilé architektury počítačů

Matematika v programovacích

2.8 Procesory. Střední průmyslová škola strojnická Vsetín. Ing. Martin Baričák. Název šablony Název DUMu. Předmět Druh učebního materiálu

Testování jednotky ALU a aplikace metody FMEA

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

ARCHITEKTURA PROCESORŮ

Základy matematiky pro FEK

Paralelní programování

AGP - Accelerated Graphics Port

Profilová část maturitní zkoušky 2014/2015

Pokročilé architektury počítačů

Výkonnost mikroprocesoru ovlivňují nejvíce dvě hlediska - architektura mikroprocesoru a tzv. taktovací frekvence procesoru.

Profilová část maturitní zkoušky 2013/2014

Testování prvočíselnosti

Paralelní systémy. SIMD jeden tok instrukcí + více toků dat jedním programem je zpracováváno více různých souborů dat

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

3. Aritmetika nad F p a F 2

Mezipaměti počítače. L2 cache. L3 cache

Přidělování paměti II Mgr. Josef Horálek

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Pokročilé architektury počítačů

Architektury počítačů a procesorů

Architektury CISC a RISC, uplatnění v personálních počítačích

Pamět ová hierarchie, návrh skryté paměti cache 2

Příklady popisu základních obvodů ve VHDL

Pamět ová hierarchie, virtuální pamět. doc. Ing. Róbert Lórencz, CSc.

Implementace numerických metod v jazyce C a Python

Rychlá vyrovnávací paměť v architektuře PC

Pokročilé architektury počítačů

Hlavní využití počítačů

MIKROPROCESOR. (c) Ing. Josef Varačka. Title: XI 28 11:40 (1 of 8)

Sběrnicová architektura POT POT. Jednotlivé subsystémy počítače jsou propojeny sběrnicí, po které se přenáší data oběma směry.

Zpracování obrazu v FPGA. Leoš Maršálek ATEsystem s.r.o.

Paměti EEPROM (1) Paměti EEPROM (2) Paměti Flash (1) Paměti EEPROM (3) Paměti Flash (2) Paměti Flash (3)

Profilová část maturitní zkoušky 2017/2018

Transkript:

Optimalizace a hodnocení efektivity lineárních kódů Ivan Šimeček, Pavel Tvrdík Department of Computer Science and Engineering Faculty of Electrical Engineering Czech Technical University Karlovo nám. 13 121 35 Prague 2 Czech Republic This research has been supported by grant IBS 3086102.

Obsah prezentace 2 (1) Proč optimalizovat? (2) Architektura procesorů Intel (AMD) a některé nové rysy (3) SW techniky pro optimalizaci (4) Pravděpodobnostní model chování skryté paměti (5) Knihovny pro LA, výhody a nevýhody (6) Příklady použití jednotlivých optimalizačních postupů

Proč optimalizovat? 3 Motivační příklad Násobení matic (MMM), tzn. A(n, n) B(n, n) = C(n, n) Klasický algoritmus pro násobení (podle definice) Pro uložení čísel a výpočet použita dvojitá přesnost (typ double). Pro všechna měření (kromě vyjímky na slajdu 15) byla použita následující konfigurace: Intel Pentium 4 2.4GHz, výrobcem udávaná špičková výkonnost procesoru 2.4 Gflops. 512MB hlavní paměť na 400MHz, 8KB skrytá paměť 1. úrovně (L1) a 128KB skrytá paměti 2. úrovně (L2). Intel kompilátor (ICC) s přepínači pro maximální výkon.

Standardní implementace MMM 4 Algorithm SMMM(in double A, B[1,..., n][1,..., n]; out C[1,..., n][1,..., n]) ( Standardní implementace MMM ) for i = 1 to n do for j = 1 to n do begin s = 0; for k = 1 to n do s+ = A[i][k] B[k][j]; C[i][j] = s; end Požadavky na paměťovou sběrnici Na 1 prvek výsledné matice je třeba z paměti načíst 2n čísel. Výkonnost Počet aritmetických FPU operací za jednotkový čas: V = 2 n3 T SMMM.

Proč optimalizovat? 5 Výkonnost jednotlivých variant algoritmu MMM Výkonnost [Mflops] 900 800 700 600 500 400 300 200 100 SMMM 0 0 50 100 150 200 250 300 350 400 450 Rozmr matic

Architektura procesorů Intel a některé nové rysy 6 Vektorizace výpočtu Nové procesory obsahují podporu pro vektorové výpočty. Intel: od Pentia MMX pro typ integer, od Pentia III pro typ float (technologie SSE), od Pentia IV pro typ double (technologie SSE2). AMD: od AMD K6 pro typ integer, od AMD K6-2 pro typ float (technologie 3D now!), od Athlon pro typ double. Architektura vektorové jednotky miniaturní architektura SIMD (Simple Instruction Multiple Data): Procesor obsahuje vektorové registry pro krátká pole dat. Jedna operace nad vektorovým registrem = paralelní operace nad jednotlivými položkami pole.

Vektorizace výpočtu (pokr.) 7 Typy vektorových instrukcí: binární aritmetické operace (sčítání, odčítání, násobení) (viz Obr. 1(a)), redukce pomocí takových op. (viz Obr. 1(b)), binární logické operace (AND, NAND, OR, XOR), porovnávací operace, maximum, minimum, konverze mezi jednotlivými formáty (byte, word, doubleword, quadword), posuvné operace. reg. A reg. B reg. C * + = * * * + + + = = = reg. A reg. A + + (b) reg. C (a) Obr. 1

Vektorizace výpočtu (pokr.) 8 Požadavky: (1) Položky musí v paměti sousedit. (2) Klasický for cyklus s jedním výstupním bodem. (3) Počet iterací znám před zahájením provádění cyklu. (4) Položky z aktuální iterace nesmějí být závislé na položkách z předchozích iterací. Podpora v kompilátorech: podpora nových datových typů (GCC+ICC), automatická vektorizace (ICC), automatická detekce vhodného procesoru (ICC).

Vektorizované MMM 9 Výkonnost jednotlivých variant algoritmu MMM 1200 Výkonnost [Mflops] 1000 800 600 400 200 SMMM Vektorizace 0 0 50 100 150 200 250 300 350 400 450 Rozmr matic

Architektura procesorů Intel a některé nové rysy 10 Skrytá paměť (cache) Malá a rychlá paměť pro uchovávání nejčastějších dat, úspěšnost jejíhož použití závisí na naplnění hypotézy výpočetní lokality: (1) časová (temporal) = právě používaná data budou pravděpodobně brzy znovu použita; (2) prostorová (spatial) = data sousední s právě používanými daty budou pravděpodobně brzy použita. Def.: Skrytá paměť se stupněm asociativity s (s-way set-associative cache) = omezená rozptylovací (hash) tabulka s jednoznačnou mapovací fcí f: modulo 2 k. Celý adresní prostor se dělí do h disjunktních tříd. 1 třída se mapuje do 1 množiny (set) bloků (lines), značených R[0,..., h 1]. 1 množina R[i] = s bloků, s = stupeň asociativity.

Velikost a struktura skryté paměti 11 Velikost datové části skryté paměti se stupněm asociativity s a h množinami bloků o velikosti B S je C S = s B S h. h R[1] R[2] R[3] R[4] adr2 Skryta pamet adr1 Hlavni pamet 1 2 3 4 1 2 adr1: 3 4 1 2 3 4 s adr2: 1 2 3 4

Popis chování skryté paměti 12 Nechť A je adresní prostor. Pak mapovací fce je zobrazení f : A {0,..., h 1}. Uvažujme např. čtení z adresy adr A. Pokud adr R[f(adr)], pak nalezení platného bloku ve skryté paměti (cache hit). Pokud adr / R[f(adr)], pak výpadek bloku ve skryté paměti (cache miss) a příslušný blok musí být načten z hlavní paměti. Rozlišujeme 2 typy výpadků ve skryté paměti: (1) povinné (compulsory) = první natažení dat z hlavní paměti do prázdných bloků skryté paměti ( R[f(adr)] < s ). (2) konfliktní (thrashing) = opakované natažení bloku, které byl před tím nahrán do skryté paměti, ale pak předčasně z kapacitních důvodů zrušen ( R[f(adr)] = s ).

Paměťová hierarchie 13 Skrytá paměť 1. úrovně: doba odezvy kolem 1-2 taktů. Skrytá paměť 2. úrovně: doba odezvy kolem 2-5 taktů. Hlavní paměť: doba odezvy řádově 20-200 taktů = nejslabší článek řetězu: podstatně nižší průtok = objem načtených dat za jednotku času. CPU reg. L1 L2 cache cache Hlavni pamet CPU cip Test průtoku paměťové sběrnice for i = 1 to n do s = a[i]; for i = 1 to n do s = a[i];

Průtok v rámci paměťové hierarchie 14 Velikost průtoku v závislosti na velikosti pole: na IBM PC Celeron 1GHz, hlavní paměť 256MB @ 100MHz, L2 = 128KB, L1 = 16KB. prutok dat [GB/s] L1 cache 7 GB/s L2 cache 5 GB/s Hl. pamet 620 MB/s 16K 128K velikost pole n

Odhad časové složitosti lineárních kódů 15 Uvažujme opět IBM PC Celeron 1GHz, hlavní paměť 256MB @ 100MHz, L2 = 128KB, L1 = 16KB. Uvažujme výpočet skalárního součinu 2 vektorů typu double o délce n = 10 6. Jaká bude doba trvání tohoto výpočtu? (1) Teoretická špička (maximální výkonnost FPU): 1 takt = 1 flop = T 1 2Mflop / 1Gflops = 2 ms. (2) Očekávaná výkonnost (70% maximální výkonnosti FPU): T 2 2Mflop / (1Gflops * 0,7)= 2,9 ms. (3) Reálná výkonnost: Z hlavní paměti je třeba načíst 16MB dat, všechny mimo skrytou paměť. Předpokládáme průtočnost hlavní sběrnice 620MBs 1 (viz předchozí test). Tudíž T 3 16MB / 620MBs 1 = 25,8 ms.

Architektura procesorů Intel a některé nové rysy 16 Registry pro sledování četností událostí (performance counters) (1) (1) Implementovány od procesorů: Intel: Pentium Pro, AMD: Duron. (2) Více než 70 možných měřitelných událostí, počet současně měřených událostí je omezen: Intel: max. 2. AMD: max. 4. (3) Jsou to 64bitové čítače, jejichž čtení je privilegovaná operace. Problém u OS Linux: patch do jádra, speciální C knihovna.

SW techniky a jejich vliv na počet výpadků ve skryté paměti 17 (1) Rozvinutí cyklu a sloučení (loop unrolling-and-jam). (2) Rozdělení cyklů do bloků (loop blocking). (3) (Dynamické) obracení směru (smyslu) cyklu ((dynamic) loop reversal).

Rozvinutí cyklu a sloučení (RC&S) 18 Cyklus se rozvine do několika nezávislých vláken. Po dokončení cyklu se výsledky jednotlivých vláken sloučí. Počet vláken se označuje rank. RC&S pro MMM (rank=2) for i = 1 to n do for j = 1 to n step 2 do begin s1 = 0; s2 = 0; for k = 1 to n do s1+ = A[i][k] B[k][j]; s2+ = A[i][k] B[k][j + 1]; C[i][j] = s1; C[i][j + 1] = s2; end Požadavky na paměťovou sběrnici Na 2 prvky výsledné matice je třeba z paměti načíst 3n operandů = 25% úspora.

Efekty techniky RC&S 19 (1) Vícenásobné použití operandu A[i][k]. (2) Pokud předpokládáme, že operace FMUL and FADD jsou 2-úrovňové, pak eliminace prostojů (stalls). Standardni MMM algoritmus RC&S MMM algoritmus L L MUL ADD L L MUL ADD L L MUL! ADD L L MUL ADD L L MUL!! ADD L L MUL ADD!!! L L MUL ADD L L MUL ADD cykly cykly

Výkonnost RC&S MMM (rank=4) 20 Výkonnost jednotlivých variant algoritmu MMM Výkonnost [Mflops] 1800 1600 1400 1200 1000 800 600 400 200 SMMM Vektorizace RC&S 0 0 50 100 150 200 250 300 350 400 450 Rozmr matic

Standardní násobení SMMM (1.iterace) matice Blokové rozdělení a prolnutí cyklů (BRPC) 21 A matice B matice C

Blokové rozdělení a prolnutí cyklů (BRPC) 22 Standardní násobení SMMM (1. a 2. iterace) matice A matice B matice C matice A matice B matice C

Blokové rozdělení a prolnutí cyklů (BRPC) 23 Standardní násobení SMMM (2. a 3. iterace) matice A matice B matice C matice A matice B matice C

Blokové rozdělení a prolnutí cyklů (BRPC) 24 Standardní násobení SMMM (3. a (n 1). iterace) matice A matice B matice C matice A matice B matice C

Blokové rozdělení a prolnutí cyklů (BRPC) 25 Standardní násobení SMMM ((n 1). a n. iterace) matice A matice B matice C matice A matice B matice C

Blokové rozdělení a prolnutí cyklů (BRPC) 26 Násobení MMM s BRPC (1. iterace) matice A matice B maticec

Blokové rozdělení a prolnutí cyklů (BRPC) 27 Násobení MMM s BRPC (1. a 2. iterace) matice A matice B maticec matice A matice B matice C

Blokové rozdělení a prolnutí cyklů (BRPC) 28 Násobení MMM s BRPC (2. a 3. iterace) matice A matice B matice C matice A matice B matice C

Blokové rozdělení a prolnutí cyklů (BRPC) 29 Násobení MMM s BRPC (3. a blok. iterace) matice A matice B matice C matice A matice B matice C

Blokové rozdělení a prolnutí cyklů (BRPC) 30 Standardní násobení SMMM: pro výpočet řádky C se musí načíst řádek A a celá B. matice A matice B matice C i j k cyklus cyklus cyklus Násobení MMM s BRPC: pro výpočet příspěvků několika řádků C se načtený blok B použije vícenásobně. matice A matice B matice C i2 cyklus j 2 cyklus k 2 cyklus

Blokové rozdělení a prolnutí cyklů (BRPC) 31 Výpočet optimální velikosti bloku Pro dobrou výkonnost kódu je třeba, aby skrytá paměť dokázala uchovat submatice A (blok, blok), B (blok, blok) a C (blok, blok). Proto musí být velikost skryté paměti větší než velikost těchto submatic. C S > 3 blok 2 (velikost elementu). V našem případě blok < 74.

Výkonnost MMM s BRPC 32 Výkonnost jednotlivých variant algoritmu MMM 1600 1400 Výkonnost [Mflops] 1200 1000 800 600 400 BRPC (blok=16) BRPC (blok=32) BRPC (blok=64) BRPC (blok=128) 200 0 0 100 200 300 400 500 Rozmr matic

Výkonnost MMM s BRPC 33 Výkonnost jednotlivých variant algoritmu MMM Výkonnost [Mflops] 1800 1600 1400 1200 1000 800 600 400 200 SMMM Vektorizace RC&S BRPC 0 0 50 100 150 200 250 300 350 400 450 Rozmr matic

Obrácení smyslu cyklu (OSC) 34 Klasický výpočet normy vektoru Algorithm Norm(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 1 to 16 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. a[1] 1)

Obrácení smyslu cyklu (OSC) 35 Klasický výpočet normy vektoru Algorithm Norm(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 1 to 16 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 1) 4) a[1] a[1] a[2] a[3] a[4]

Obrácení smyslu cyklu (OSC) 36 Klasický výpočet normy vektoru Algorithm Norm(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 1 to 16 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 1) 4) 5) a[1] a[1] a[1] a[5] a[2] a[2] a[3] a[3] a[4] a[4]

Obrácení smyslu cyklu (OSC) 37 Klasický výpočet normy vektoru Algorithm Norm(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 1 to 16 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 1) 4) 5) 9) a[1] a[1] a[1] a[5] a[9] a[5] a[2] a[2] a[2] a[6] a[3] a[3] a[3] a[7] a[4] a[4] a[4] a[8]

Obrácení smyslu cyklu (OSC) 38 Klasický výpočet normy vektoru Algorithm Norm(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 1 to 16 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 1) 4) 5) 9) 16) a[1] a[1] a[1] a[5] a[9] a[5] a[9] a[10] a[2] a[2] a[2] a[6] a[11] a[12] a[3] a[3] a[3] a[7] a[13] a[14] a[4] a[4] a[4] a[8] a[15] a[16] První for cyklus vyvolá 16 povinných výpadků ve skryté paměti.

Obrácení smyslu cyklu (OSC) 39 Klasický výpočet normy vektoru Algorithm Norm(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 1 to 16 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 17) a[1] a[10] a[11] a[12] a[13] a[14] a[14] a[16]

Obrácení smyslu cyklu (OSC) 40 Klasický výpočet normy vektoru Algorithm Norm(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 1 to 16 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 17) a[1] a[10] a[11] a[12] a[13] a[14] a[14] a[16] a[9] a[11] a[13] a[14] 32) a[10] a[12] a[14] a[16] Druhý for cyklus vyvolá 16 konfliktních výpadků ve skryté paměti.

Výpočet normy vektoru s OSC 41 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. a[1] 1)

Výpočet normy vektoru s OSC 42 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 1) 4) a[1] a[1] a[2] a[3] a[4]

Výpočet normy vektoru s OSC 43 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 1) 4) 5) a[1] a[1] a[1] a[5] a[2] a[2] a[3] a[3] a[4] a[4]

Výpočet normy vektoru s OSC 44 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 1) 4) 5) 9) a[1] a[1] a[1] a[5] a[9] a[5] a[2] a[2] a[2] a[6] a[3] a[3] a[3] a[7] a[4] a[4] a[4] a[8]

Výpočet normy vektoru s OSC 45 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 1) 4) 5) 9) 16) a[1] a[1] a[1] a[5] a[9] a[5] a[9] a[10] a[2] a[2] a[2] a[6] a[11] a[12] a[3] a[3] a[3] a[7] a[13] a[14] a[4] a[4] a[4] a[8] a[15] a[16] První for cyklus vyvolá 16 povinných výpadků ve skryté paměti.

Výpočet normy vektoru s OSC 46 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 16) a[9] a[11] a[13] a[15] a[10] a[12] a[14] a[16]

Výpočet normy vektoru s OSC 47 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 16) 17) a[9] a[10] a[9] a[10] a[11] a[12] a[11] a[12] a[13] a[14] a[13] a[14] a[15] a[16] a[15] a[16]

Výpočet normy vektoru s OSC 48 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 16) 17) a[9] a[10] a[9] a[10] a[11] a[13] a[15] a[12] a[14] a[16] a[11] a[13] a[15] a[12] a[14] a[16] 24) a[9] a[10] a[11] a[12] a[13] a[14] a[15] a[16]

Výpočet normy vektoru s OSC 49 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 16) 17) 24) a[9] a[10] a[9] a[10] a[9] a[10] a[11] a[13] a[12] a[14] a[11] a[13] a[12] a[14] a[11] a[13] a[12] a[14] a[15] a[16] a[15] a[16] a[15] a[16] 25) a[9] a[10] a[11] a[12] a[13] a[14] a[8] a[16]

Výpočet normy vektoru s OSC 50 Algorithm NormOSC(in double a[1,..., 16]; out a) (1) s = 0.0; (2) for i = 1 to 16 do (3) s+ = a[i] a[i]; (4) vel = s; (5) for i = 16 downto 1 do (6) a[i]/ = vel; Plnění skryté paměti s h = 4 a s = 2 v jednotlivých iteracích. 16) 17) 24) 25) 32) a[9] a[10] a[9] a[10] a[9] a[10] a[9] a[10] a[5] a[1] a[11] a[12] a[11] a[12] a[11] a[12] a[11] a[12] a[6] a[2] a[13] a[14] a[13] a[14] a[13] a[14] a[13] a[14] a[7] a[3] a[15] a[16] a[15] a[16] a[15] a[16] a[8] a[16] a[8] a[4] Druhý for cyklus vyvolá 8 nalezení a 8 konfliktních výpadků ve skryté paměti.

Dynamické OSC 51 Technika použitelná pro 2-úrovňový cyklus. Provádí OSC vnitřního v závislosti na paritě řídící proměnné vnějšího cyklu.

Dynamické OSC 52

Dynamické OSC 53

Dynamické OSC 54

Dynamické OSC 55

Pravděpodobnostní model pro chování skryté paměti 56 Je třeba rozumně zvolit zjednodušující předpoklady. Umožňuje předpovídat počty výpadků ve skryté paměti během provádění algoritmu = lze použít pro výpočet parametrů optimální transformace kódů. Existují dva základní typy: (1) pravděpodobnostní model, (2) model využívající tzv. přístupový interval (reuse distance).

Model využívající přístupový interval (1) 57 Definice: Posloupnost paměťových referencí P : P [t] = adr paměťová transakce číslo t přistupovala na adresu adr. Přístupový interval RD(t) = počet různých paměťových referencí mezi dvěma následnými použitími adresy P [t]. čili: je-li P [t] = adr a δ > 0 je minimální přirozené číslo takové, že P [t + δ] = adr, pak RD(t) = {P [t + 1],..., P [t + δ 1]}. Pokud RD(t) > C S, pak je blok na adrese P [t] = adr (který byl do skryté paměti nahrán v čase t) odstraněn před svým dalším znovupoužitím = vznikne konfliktní výpadek ve skryté paměti při čtení či zápisu. Omezení Přístupový interval podle definice je funkcí času, ale v praxi počítáme s jeho průměrnou hodnotou. Tento model nerespektuje mapovací funkci skryté paměti, počítá s plně asociativní skrytou pamětí (h = 1).

Knihovny pro LA 58 (1) Dostupné na každé počítačové platformě: volně šiřitelné (BLAS, LAPACK, ScaLAPACK), firemní (IBM ESSL, Intel MKL, Sun Performance Library). (2) Optimalizované pro architekturu procesoru. (3) Mají zabudované techniky pro zvýšení přesnosti (např. pivotizace). (4) Verze pro sekvenční výpočet, výpočet nad sdílenou pamětí, výpočet nad distribuovanou pamětí, výpočet na gridu.

Výkonnost MMM v knihovnách. MMM pomocí knihoven 59 Výkonnost jednotlivých variant algoritmu MMM 1800 1600 Výkonnost [Mflops] 1400 1200 1000 800 600 400 200 BRPC MKL GOTO ATLAS 0 0 50 100 150 200 250 300 350 400 450 Rozmr matic

Možné nevýhody knihoven pro LA 60 Nedostatečný počet poskytovaných metod a algoritmů. Nedostatečný počet podporovaných formátů. Neexistuje možnost ovlivnit způsob řešení uvnitř jednoho algoritmu. Poskytovaná přesnost a stabilita nemusí být dostatečná. Způsob řešení problémů může být příliš obecný. Kombinace jednotlivých výpočtů nemusí být paměťově optimální. Např., výpočet a = A x a b = A T x.

Vyhodnocení výsledků (1) 61 Násobení řídké matice vektorem Formát komprimovaných řádků (CSR) Vektorizace nejde provést kvůli nepřímému adresování. Rozvinutí cyklu a sloučení vede ke zvýšení výkonnosti o 10% díky lepšímu využití vnitřní kaskády FPU jednotky. Rozdělení cyklů do bloků nemá smysl, protože není co znovupoužívat. Dynamické obracení směru cyklu nemá smysl, protože počet nenulových prvků v jednom řádku matice je příliš malý. Jiné formáty uložení řídké matice Lze vymýšlet lepší formáty uložení řídké matice. Např. kombinovaný formát slučující výhody CSR a diagonálního uložení. Adaptivní algoritmus pro SpM V. Umožňuje efektivnější uložení řídkých matic a použití vektorových instrukcí. Vede k dalšímu zvýšení výkonnosti o 15% v závislosti na velikosti matice.

Vyhodnocení výsledků (2) 62 Metoda CG Násobení SpM V uvnitř iterací zabírá cca 70% celkového času. Jeho vylepšení vede ke zvýšení výkonnosti o 7%. Vektorizace lineárních operací s vektory vede ke zvýšení výkonnosti o 6%. Rozdělení cyklů do bloků nemá smysl. Obrácení směru cyklu u jedné operace s vektorem vede ke zvýšení výkonnosti o < 1% Datové propojení operací A x = b a b x = α vede ke zvýšení výkonnosti o 6%.

Vyhodnocení výsledků (3) 63 Metoda BiCG Dvě násobení SpM V uvnitř iterací zabírají cca 70% celkového času. Jejich vylepšení vede ke zvýšení výkonnosti o 7%. Vektorizace lineárních operací s vektory vede ke zvýšení výkonnosti o 6%. Rozdělení cyklů do bloků nemá smysl. Obracení směru cyklu u dvou operací s vektory vede ke zvýšení výkonnosti o < 1% Datové propojení operací A x = b a A T x = c vede ke zvýšení výkonnosti o 30%, protože matice A se čte pouze jednou..

Vyhodnocení výsledků (4) 64 Choleskyho faktorizace Vektorizace vede ke zvýšení výkonnosti o 50% Rozvinutí cyklu a sloučení vede ke zvýšení výkonnosti o 30% díky lepšímu využití vnitřní kaskády FPU jednotky a díky znovupoužití některých operandů. Rozdělení cyklů do bloků vede ke zvýšení výkonnosti až o 90% pro velké rozměry matic. Dynamické obracení směru cyklu vede ke zvýšení výkonnosti o cca 3% v závislosti na velikosti matice. Choleskyho faktorizace pro pásové matice Použití rekurzivního algoritmu vede ke zvýšení výkonnosti o 20-200% v závislosti na velikosti matice díky odstranění globálních referencí.