Algoritmus SPIKE se zabývá lineárním systémem SEKERA = F, kde A je pruhovaný matice šířka pásma mnohem méně než , a F je matice obsahující pravé strany. Je rozdělena na fázi předzpracování a fázi po zpracování.
Fáze předběžného zpracování
Ve fázi předzpracování lineární systém SEKERA = F je rozdělen do blokovat tridiagonální formulář
Předpokládejme, že úhlopříčka zatím blokuje Aj (j = 1,...,str s str ≥ 2) jsou nesmyslný. Definovat a úhlopříčka bloku matice
D = diag (A1,...,Astr),
pak D je také nesmyslná. Násobení doleva D−1 na obě strany systému dává
který má být vyřešen ve fázi postprocesingu. Násobení doleva D−1 je ekvivalentní řešení systémy formuláře
Aj[PROTIjŽjGj] = [BjCjFj]
(vynechání Ž1 a C1 pro , a PROTIstr a Bstr pro ), které lze provádět paralelně.
Vzhledem k pruhované povaze A, jen několik sloupců zcela vlevo PROTIj a několik sloupců zcela vpravo Žj může být nenulová. Tyto sloupce se nazývají hroty.
Fáze po zpracování
Bez ztráty obecnosti Předpokládejme, že každý hrot obsahuje přesně sloupce ( je mnohem méně než ) (v případě potřeby podložte hrot sloupci nul). Rozdělte hroty do všech PROTIj a Žj do
a
kde PROTI(t) j, PROTI(b) j, Ž(t) j a Ž(b) j jsou rozměrů . Rozdělte podobně všechny Xj a Gj do
a
Všimněte si, že systém produkovaný fází předzpracování lze zredukovat na blok pentadiagonální systém mnohem menší velikosti (připomeňme si to je mnohem méně než )
kterému říkáme snížený systém a označit S̃X̃ = G.
Jednou všechno X(t) j a X(b) j jsou nalezeny, všechny X′j lze obnovit pomocí dokonalého paralelismu pomocí
SPIKE jako polyalgoritmický pásový řešič lineárního systému
Přesto, že je logicky rozdělen do dvou fází, výpočetně, algoritmus SPIKE zahrnuje tři fáze:
Každá z těchto fází může být provedena několika způsoby, což umožňuje velké množství variant. Dvě pozoruhodné varianty jsou rekurzivní SPIKE algoritmus pro ne-úhlopříčně dominantní případy a zkrácený SPIKE algoritmus pro úhlopříčně dominantní případy. V závislosti na variantě lze systém vyřešit buď přesně, nebo přibližně. V druhém případě se SPIKE používá jako předpoklad pro iterační schémata jako Krylovské podprostorové metody a iterativní upřesnění.
Rekurzivní SPIKE
Fáze předběžného zpracování
Prvním krokem fáze předzpracování je faktorizace diagonálních bloků Aj. Pro numerickou stabilitu lze použít LAPACK je XGBTRF rutiny LU faktorizovat je s částečným otočením. Alternativně je lze také faktorizovat bez částečného otáčení, ale se strategií „posílení úhlopříčky“. Druhá metoda řeší problém singulárních diagonálních bloků.
Konkrétně jde o strategii posílení úhlopříčky následovně. Nechat 0ε označuje konfigurovatelnou „nulu stroje“. V každém kroku faktorizace LU požadujeme, aby pivot splnil podmínku
| pivot | > 0ε‖A‖1.
Pokud čep nevyhovuje podmínce, je posílen o
kde ε je kladný parametr v závislosti na stroji zaokrouhlení jednotky a faktorizace pokračuje s posíleným pivotem. Toho lze dosáhnout upravenými verzemi ScaLAPACK je XDBTRF rutiny. Poté, co jsou diagonální bloky faktorizovány, jsou hroty vypočítány a předány do fáze postprocesingu.
Fáze po zpracování
Pouzdro se dvěma oddíly
V případě dvou oddílů, tj. Když str = 2, redukovaný systém S̃X̃ = G má formu
Jednou X(b) 1 a X(t) 2 Jsou nalezeny, X(t) 1 a X(b) 2 lze vypočítat pomocí
X(t) 1 = G(t) 1 − PROTI(t) 1X(t) 2,
X(b) 2 = G(b) 2 − Ž(b) 2X(b) 1.
Pouzdro s více oddíly
Předpokládat, že str je síla dvou, tj. str = 2d. Zvažte blokovou diagonální matici
D̃1 = diag (D̃[1] 1,...,D̃[1] str/2)
kde
pro k = 1,...,str/2. Všimněte si toho D̃1 v zásadě sestává z diagonálních bloků řádu 4m extrahováno z S̃. Teď to rozložíme S̃ tak jako
S̃ = D̃1S̃2.
Nová matice S̃2 má formu
Jeho struktura je velmi podobná struktuře S̃2, liší se pouze počtem hrotů a jejich výškou (jejich šířka zůstává stejná) m). Lze tedy provést podobný faktorizační krok S̃2 k výrobě
S̃2 = D̃2S̃3
a
S̃ = D̃1D̃2S̃3.
Takové faktorizační kroky lze provádět rekurzivně. Po d − 1 kroky, získáme faktorizaci
S̃ = D̃1⋯D̃d−1S̃d,
kde S̃d má jen dva hroty. Zmenšený systém bude poté vyřešen pomocí
X = S̃−1 dD̃−1 d−1⋯D̃−1 1G.
Techniku blokování LU faktorizace v případě dvou oddílů lze použít ke zpracování zahrnujících kroků řešení D̃1, ..., D̃d−1 a S̃d protože v podstatě řeší několik nezávislých systémů zobecněných dvoudílných forem.
Zobecnění na případy, kdy str není síla dvou je téměř triviální.
Zkrácený SPIKE
Když A je diagonálně dominantní, v redukovaném systému
bloky PROTI(t) j a Ž(b) j jsou často zanedbatelné. S jejich vynecháním se zmenšený systém stane úhlopříčkou bloku
Zkrácený algoritmus SPIKE lze zabalit do nějakého vnějšího iteračního schématu (např. BiCGSTAB nebo iterativní upřesnění ) ke zlepšení přesnosti řešení.
SPIKE pro tridiagonální systémy
První rozdělení a algoritmus SPIKE byl představen v [4] a byl navržen jako prostředek ke zlepšení vlastností stability paralelního řešiče Givens založeného na rotacích pro tridiagonální systémy. Pro NVIDIA GPU byla navržena verze algoritmu s názvem g-Spike, která je založena na sériových rotacích Givens aplikovaných nezávisle na každém bloku. [5]. Algoritmus založený na SPIKE pro GPU, který je založen na speciální blokové diagonální otočné strategii, je popsán v [6].
SPIKE jako předpoklad
Algoritmus SPIKE může také fungovat jako předpoklad pro iterační metody řešení lineárních systémů. Řešit lineární systém Sekera = b pomocí iteračního řešiče s předpřipraveným SPIKE se extrahuje středové pásmo A vytvořit pásový předkondicionér M a řeší lineární systémy zahrnující M v každé iteraci s algoritmem SPIKE.
Aby byl předběžný kondicionér efektivní, je obvykle nutná permutace řádků a / nebo sloupců k přesunu „těžkých“ prvků A blízko úhlopříčky tak, aby byly zakryty preconditionerem. Toho lze dosáhnout výpočtem vážené spektrální přeskupení z A.
Algoritmus SPIKE lze zobecnit tím, že neomezuje striktně pásmový předpoklad. Zejména může být diagonální blok v každé přepážce obecná matice, a proto s ní může pracovat spíše přímý obecný řešič lineárního systému než pásmový řešič. To zvyšuje preconditioner, a proto umožňuje větší šanci na konvergenci a snižuje počet iterací.
Implementace
Intel nabízí implementaci algoritmu SPIKE pod jménem Intel Adaptive Spike-Based Solver[7]. Tridiagonální řešiče byly vyvinuty také pro GPU NVIDIA [8][9] a koprocesory Xeon Phi. Metoda v [10] je základem pro třířadý řešič v knihovně cuSPARSE.[1] Řešitel založený na rotacích Givens byl také implementován pro GPU a Intel Xeon Phi.[2]
^ Polizzi, E .; Sameh, A. H. (2006). "Paralelní hybridní pásmový systémový řešič: algoritmus SPIKE". Parallel Computing. 32 (2): 177–194. doi:10.1016 / j.parco.2005.07.005.
^ Polizzi, E .; Sameh, A. H. (2007). "SPIKE: Paralelní prostředí pro řešení pásmových lineárních systémů". Počítače a kapaliny. 36: 113–141. doi:10.1016 / j.compfluid.2005.07.005.
^ Sameh, A. H .; Kuck, D. J. (1978). "Na stabilních paralelních lineárních systémových řešeních". Deník ACM. 25: 81–91. doi:10.1145/322047.322054.
^ Venetis, I.E .; Kouris, A .; Sobczyk, A .; Gallopoulos, E .; Sameh, A. H. (2015). "Přímý třírozměrný řešič založený na rotacích Givens pro architektury GPU". Parallel Computing. 25: 101–116. doi:10.1016 / j.parco.2015.03.008.
^ Chang, L.-W .; Stratton, J .; Kim, H .; Hwu, W.-M. (2012). "Škálovatelný, numericky stabilní, vysoce výkonný třířadý řešič využívající GPU". Proc. Int'l. Konf. Vysoce výkonné výpočty, síťové úložiště a analýza (SC'12). Los Alamitos, CA, USA: IEEE Computer Soc. Tisk: 27: 1–27: 11. ISBN978-1-4673-0804-5.