+ All Categories
Home > Documents > INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL...

INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL...

Date post: 29-Aug-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
49
GRAU DE MATEM ` ATIQUES Treball final de grau INTRODUCCI ´ O A L’ ` ALGEBRA LINEAL NUM ` ERICA EN PARAL·LEL Autor: Arnau Mart´ ı Rovira Director: Dr. ` Angel Jorba Realitzat a: Departament de Matem` atiques i Inform` atica Barcelona, 20 de juny de 2019
Transcript
Page 1: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

GRAU DE MATEMATIQUES

Treball final de grau

INTRODUCCIO A L’ALGEBRALINEAL NUMERICA EN

PARAL·LEL

Autor: Arnau Martı Rovira

Director: Dr. Angel Jorba

Realitzat a: Departament de

Matematiques i Informatica

Barcelona, 20 de juny de 2019

Page 2: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

Abstract

Nowadays, the technological advances give us the possibility to use computers that are capableto do several tasks and, in addition, they are approachable for a lot of people. Moreover,the Numerical Linear Algebra is full of problems that require a high calculation power andadapting them to actual technology is essential to gain efficiency and time. The main purposeof this research is to remember the numerical methods studied at the Degree in Mathematics,analyzing the possible implicit parallelisms, if there are any, and to take profit of them inorder to create parallel implementations. First of all, we will study the basic operationalsystem of a computer that is capable of working in parallel and the we will study too theOpenMP programming language. Then, we will study which parallelisms we can find inclassical methods and we will apply them in OpenMP language. Finally, we will see somealternative methods of solving linear systems, like the Conjugate Gradient method or theCyclic Reduction method, analyzing also the parallelisms that may exist.

Resum

Actualment els avencos tecnologics ens brinden la possibilitat d’utilitzar ordinadors capacosde realitzar diverses tasques a la vegada i, a mes, ens els posen a l’abast de moltes per-sones. Per altra banda, l’Algebra Lineal Numerica es plena de problemes que requereixenuna potencia de calcul molt elevada, i adaptar-los a la tecnologia actual es essencial perguanyar eficiencia i temps. El proposit d’aquest treball no es res mes, doncs, que recordarels metodes numerics estudiats durant el Grau de Matematiques, tot analitzant-ne els pos-sibles paral·lelismes que hi ha implıcits en ells, si es que hi son, i aprofitar-los per crear-neimplementacions en paral·lel. Inicialment, estudiarem el funcionament basic d’un ordinadorcapac de treballar en paral·lel i tambe del llenguatge de programacio OpenMP. Seguidament,estudiarem quins paral·lelismes podem trobar en els metodes classics i els implementaremen OpenMP. Finalment, veurem algun metode alternatiu, com ara el metode del GradientConjugat o el metode de la Reduccio Cıclica, analitzant-ne tambe els paral·lelismes que hipuguin haver.

2010 Mathematics Subject Classification. 65F05, 65F10, 65F50, 68W10

i

Page 3: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

Index

1 Introduccio 1

2 Ordinadors paral·lels 3

2.1 L’ordinador simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2 La memoria compartida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.3 Eficiencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.3.1 La multiplicacio de matrius . . . . . . . . . . . . . . . . . . . . . . . . 7

2.4 OpenMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Metodes directes 11

3.1 Eliminacio Gaussiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.2 Factoritzacio LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.2.1 Factoritzacio LU a blocs . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.2.2 Paral·lelitzant LU a blocs . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.3 Factoritzacio de Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.4 Reduccio cıclica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4 Metodes iteratius 23

4.1 Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.2 Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.3 SOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.4 Metode del Gradient conjugat . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.4.1 Una primera versio del metode . . . . . . . . . . . . . . . . . . . . . . 29

4.4.2 Simplificacio de la primera versio . . . . . . . . . . . . . . . . . . . . . 33

4.4.3 Implementacio en paral·lel . . . . . . . . . . . . . . . . . . . . . . . . . 36

5 Conclusions 37

A OpenMP 38

A.1 Comandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

A.2 Programes utilitzats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Bibliografia 46

ii

Page 4: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

1 INTRODUCCIO

1 Introduccio

Avui en dia tots hem sentit a parlar sobre processadors amb diversos nuclis, aparells queutilitzen mes d’un processador, etc. Sense anar mes lluny, molta de la tecnologia disponible almercat i a l’abast de moltes persones, com ara ordinadors portatils, ordinadors de sobretaula,mobils, tauletes... ja disposa, almenys, de processadors amb diversos nuclis. Pero sabem quevol dir que un ordinador, per exemple, tingui un processador amb quatre nuclis?

L’evolucio tecnologica de la computacio es, des de fa ja molts anys, molt rapida i creixent.Molts de nosaltres, segurament, n’hem patit alguna de les consequencies. La rapidesa ambla que els nostres aparells tecnologics queden obsolets, n’es un clar exemple. Els ordinadorsson cada vegada mes rapids i, al mateix temps, cada vegada necessitem mes potencia decomputacio i memoria. L’augment de la potencia de les maquines disponibles obre les portesa noves aplicacions i aquestes, al seu torn, demanen una potencia de computacio encara mesgran per tal de realitzar-se de manera mes rapida i eficient. Aixı doncs, tal i com ens podemimaginar, cada vegada es mes complicat fer ordinadors mes potents i aquests han de ser,necessariament, cada vegada mes complexos.

Simplificant-ho molt, podem considerar que un ordinador es limita a executar programes,que al seu torn estan formats per ordres que es van executant de manera sequencial, es a dir,una darrere l’altra. Aixı doncs, si volem augmentar la rapidesa de l’ordinador en questio,una primera via sera aconseguir que el processador executi les ordres de manera mes rapidai una segona via sera construir ordinadors capacos de realitzar diverses tasques a la vegada,es a dir, en paral·lel. Com ja es pot intuir, el nostre analisi anira enfocat a la segona via.

En primer lloc, doncs, si observem els ordinadors actuals, veurem que estan formats perdiversos components, o unitats funcionals, que haurien de ser capacos de realitzar diversestasques de manera simultania, com ara buscar una dada a la memoria, multiplicar dos nom-bres o avaluar algunes condicions. Aixo s’anomena ”paral·lelisme a nivell d’instruccio” —enangles instruction-level parallelism o ILP. Un processador que te aquesta propietat, es diuque te una arquitectura super-escalar. Avui en dia, aquesta es una propietat molt comu enels microprocessadors d’us general, fins i tot els que podem trobar en ordinadors d’us perso-nal [1]. Reordenant de manera adient aquest tipus de tasques, haurıem de mantenir tots elscomponents de l’ordinador ocupats. D’aixo, no obstant, ja se n’encarrega el compilador.

Per altra banda, els components utilitzats per construir les maquines actuals han anatdisminuint la seva mida contınuament. Poc abans del 1990, Intel va anunciar que haviaencabit 1 milio de transistors en un unic xip (l’i860). Uns quants anys despres, moltesempreses del sector ja havien aconseguit encabir-n’hi 10 milions i, avui en dia, el progrestecnologic ha fet possible arribar a encabir bilions de transistors en un unic xip. Aquestprogres, pero, ha portat tambe algunes limitacions. En particular, el consum d’energia il’emissio de calor. Es per aixo que ha calgut explorar vies alternatives.

Una d’elles, i al voltant de la qual es centra aquest treball, es una via ja exploradaal voltant dels anys 80 i segueix un principi molt senzill: construir maquines formades permultiples processadors complerts amb una memoria compartida en comu. D’aquesta manera,poden treballar en diverses tasques a la vegada, simplement dividint-les entre els diferentsprocessadors, podent, fins i tot, processar programes amb diferents necessitats de memoria.

1

Page 5: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

1 INTRODUCCIO

Aquest tipus de maquines havien estat populars, sobretot, en el mercat de servidors.

Molts dels dissenys actuals permeten que un unic processador pugui executar multiplesconjunts d’instruccions de manera intercalada. L’anomenat multithreading simultani, perexemple, intercala instruccions de diferents aplicacions amb la finalitat d’utilitzar mes com-ponents de hardware al mateix temps. Per exemple, l’ordinador podria sumar dos valors d’unconjunt d’instruccions i, al mateix temps, buscar un valor de la memoria que es necessari enun altre conjunt d’instruccions. Alguns fabricants han anat, fins i tot, mes enlla, replicantparts substancials de la logica del processador en un mateix xip, comportant-se d’una ma-nera mes propera a les maquines paral·leles amb memoria compartida. Aquesta aproximacioa les maquines paral·leles pero amb un unic xip, s’anomena multicore. Aixı doncs, tant lesplataformes de multithreading simultani, multicore com els ordinadors paral·lels de memoriacompartida, doten el sistema de suport per l’execucio de multiples conjunts d’instruccionsindependents o, com se sol anomenar, threads. A mes, aquestes diferents teconologies espoden combinar per crear ordinadors capacos d’executar un gran nombre de threads.

En aquest treball, doncs, mirarem d’entendre conceptes com aquests, veient quin es elfuncionament de la majoria d’ordinadors actuals i com se’n pot aprofitar tota la seva capacitatde calcul, aplicant-ho, com no podria ser d’una altra manera, als problemes matematics querequereixen una gran potencia de calcul.

L’Algebra Lineal Numerica i, en particular, la resolucio de sistemes d’equacions lineals,dona lloc a problemes d’aquest tipus. Moltes arees de les matematiques tracten problemesque porten a la resolucio de sistemes lineals grans, en alguns casos donant lloc a matriusassociades plenes —com pot ser el cas de la resolucio numerica d’equacions integrals— o, enaltres casos, donant lloc a matrius associades amb molts zeros —com es el cas de la resolucionumerica de les equacions diferencials en derivades parcials.

En el treball, recordarem alguns dels metodes numerics de resolucio de sistemes d’equa-cions lineals vistos durant el Grau de Matematiques i tractarem d’optimitzar-ne el tempsde calcul, identificant, si es que n’hi ha, els paral·lelismes implıcits en aquests metodes. Enel primer capıtol, ens centrarem en una comprensio del funcionament basic dels ordinadorsque disposen de processadors amb tecnologies com el multicore o el multithreading, incidinten com operen o com accedeixen a la memoria, entre d’altres aspectes. En els seguents doscapıtols, ens centrarem en l’Algebra Lineal Numerica, recordant els metodes numerics classicsi afegint-n’hi dos de no estudiats al Grau de Matematiques, el Metode de la Reduccio Cıclicai el Metode del Gradient Conjugat, tot mirant d’identificar-hi paral·lelismes i utilitzar-los perimplementar els metodes en ordinadors capacos de treballar en paral·lel.

Alguns d’aquests metodes, els programarem i comprovarem si, efectivament, utilitzant elspossibles paral·lelismes que puguin contenir, millorem, o no, l’eficacia d’aquests metodes.

Tot aixo, amb la finalitat de clarificar els conceptes i no carregar les explicacions, hotractarem des de la part mes conceptual de la computacio en paral·lel, es a dir, sense entrar enel llenguatge de programacio utilitzat. No obstant, per a dur a terme els programes proposatsi executar-los, utilitzarem OpenMP, que es una extensio de C, llenguatge ja conegut i utilitzatal Grau de Matematiques. Al final del treball podreu trobar un apendix amb les instruccionsd’OpenMP que hem necessitat i els codis dels programes que ens han anat sorgint.

2

Page 6: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

2 ORDINADORS PARAL·LELS

2 Ordinadors paral·lels

Per tal de poder avancar en els nostres proposits, ens cal, necessariament, entendre quin esel funcionament elemental d’un ordinador. Saber com realitza els calculs es essencial a l’horade dissenyar algoritmes i implementar-los.

En aquesta seccio, ens centrarem en primer lloc, a entendre el funcionament elemen-tal d’un ordinador simple, a continuacio observarem com treballa un ordinador paral·lel dememoria compartida i, finalment, tractarem de comprendre el funcionament basic del llen-guatge OpenMP. Molts dels conceptes i idees que es poden trobar en aquesta seccio es podentrobar mes ampliats a [1].

2.1 L’ordinador simple

Abans d’entrar en el mon del que anomenarem ordinadors paral·lels, es a dir, ordinadors ambmes d’un thread2, farem un cop d’ull al funcionament del que anomenarem un ordinadorsimple, es a dir, un ordinador que disposa d’una unica CPU —Unitat Central de Proces—que disposa d’un unic nucli, o core, capac d’executar un unic fil d’instruccions. Observemprimer quines parts componen un CPU (Figura 1):

1. Unitat logica: Realitza operacions aritmetiques —suma, resta, divisio, multiplica-cio—, logiques —comparant dades mitjancant portes logiques com AND, OR..., o undesplacament dels bits de la variable —el que s’anomena shift. La Unitat de controles qui indica quina operacio ha de realitzar —mitjancant un codi d’operacio— i ambquina o quines dades l’ha de realitzar.

2. Unitat de control: Unitat encarregada de llegir les instruccions guardades en lamemoria principal i de generar els senyals de control necessaris per controlar i coor-dinar la resta de les unitats funcionals d’un ordinador, amb el proposit d’executar lesinstruccions llegides.

3. Registres: Son petites unitats que emmagatzemen dades que processador utilitza, lacapacitat dels registres varia en funcio de l’arquitectura del processador. Per exempleen arquitectures de 64 bits, els registres son de 64 bits. En processadors Pentiumantics eren de 32 bits. Actualment, pero, la majoria de processadors treballen amb unaarquitectura de 64 bits.

4. Memoria cau: Actualment, a la majoria de CPU’s hi podem trobar el que s’anomenamemoria cau, que es una memoria amb una capacitat baixa en relacio a altres tipus dememoria, pero amb una velocitat de lectura i escriptura molt elevades.

En aquest cas, el funcionament es molt simple, la CPU, a traves de la Unitat de control,llegeix les instruccions que es troben a la memoria principal i indica a la Unitat logica quinesoperacions ha de fer per tal de complir-les. Observem tambe que dins la CPU hi podemtrobar una part de memoria: la memoria cau (o cache).

2Anomenarem thread o fil d’execucio a la unitat de processament mes petita que pot ser programada perexecutar independentment una sequencia d’instruccions.

3

Page 7: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

2 ORDINADORS PARAL·LELS

Figura 1: Esquema d’un CPU

Es en aquest ultim component, la memoria, on rau una de les claus de l’eficiencia compu-tacional d’un ordinador. Avui en dia, els avencos tecnologics ens han portat a disposar deprocessadors amb una velocitat molt elevada, capacos de realitzar operacions en un tempsınfim. Aixo, no obstant, es contraposa al fet de que les memories, en general no ho son tant iles que sı que ho son, tenen un cost molt elevat. Es per aixo que la memoria d’un ordinador teuna estructura jerarquica, combinant diversos tipus de memoria per tal d’aconseguir, a granstrets, que la memoria que mes utilitzi el processador sigui tant rapida com sigui possible senseencarir excessivament el cost de l’ordinador. Aixı doncs, en un ordinador hi podem trobarla memoria cau —subdividida en 2 o mes nivells—, la memoria principal —el que coneixemcom a memoria RAM— i la memoria secundaria. En general, els nivells de la memoria caus’enumeren en ordre ascendent en funcio de la proximitat al processador3, de manera que lade nivell 1 es la mes propera al processador. La memoria cau de nivell 1 es la mes rapidapero te una capacitat reduıda (actualment entre 64KB i 3MB) i es divideix en dues parts,una dedicada a les instruccions i l’altra a les dades; per altra banda la memoria cau de nivell2 no es tant rapida com la de nivell 1 i no la trobem dividida, pero te una capacitat major(actualment entre 256KB i 16MB).

Tal com hem comentat, aquesta estructura jerarquica te la finalitat de donar suport alprocessador, evitant que hagi d’esperar les dades que necessita. El processador, doncs, quannecessita una dada, en primer lloc la busca a la memoria cau de nivell 1, si no la troba,la busca a la de nivell 2, si tampoc la troba, la busca a la memoria principal i finalment,si tampoc la troba, la busca a la memoria secundaria. D’altra banda, quan una dada esrequerida pel processador se’n fa una copia a la memoria cau, pero no nomes d’aquesta dada

3Considerem que una determinada unitat de memoria es mes propera al processador que una altra si eltemps necessari per accedir a la primera es menor que per accedir a la segona.

4

Page 8: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

2 ORDINADORS PARAL·LELS

requerida sino tambe de les dades veınes. D’aquesta manera, si el processador necessita ladada emmagatzemada a la posicio de la memoria que es troba a continuacio de la que hautilitzat en la operacio anterior, aquesta ja es trobara a la memoria cau i hi podra accedirrapidament.

2.2 La memoria compartida

Com hem mencionat anteriorment, una de les idees mes simples i efectives que donen lloca la computacio paral·lela, es l’us de memoria compartida. D’ara en endavant, denomina-rem als ordinadors paral·lels amb memoria compartida SMP’s (de shared-memory parallelcomputers).

Originalment, el terme SMP es referia a sistemes de multiprocessadors simetrics, es a dir,ordinadors paral·lels amb memoria compartida, els processadors individuals dels quals soncapacos d’accedir a qualsevol adreca de la memoria amb la mateixa rapidesa. En tal cas, esdiu que tenen temps d’acces uniforme a la memoria (UMA). Molts ordinadors SMP petitsson simetrics en aquest sentit pero, no obstant, els ordinadors mes grans no acostumen asatisfer aquesta definicio; tot i que la diferencia pot ser relativament petita, algunes adrecesde la memoria poden estar mes aprop d’un o mes processadors i aquests hi accediran mesrapidament i en aquest cas, diem que l’ordinador te cache-coherent non-uniform memoryaccess (cc-NUMA).

Figura 2: Esquema de la memoria d’un ordinador SMP que disposa d’un processador multi-core amb dos nuclis.

Avui en dia, la majoria dels fabricants d’ordinadors ofereixen alguna forma d’ordinadorsparal·lels amb memoria compartida, amb un nombre de processadors que pot anar des de dosfins a centenars o, fins i tot, milers. No obstant, aquest concepte es refereix, basicament aordinadors amb diverses CPU’s i ja hem vist que podem trobar ordinadors amb tecnologiescom el multicore o el multithreading que tambe ens permeten executar instruccions en pa-ral·lel. Per simplificar, direm que qualsevol ordinador amb alguna d’aquestes tecnologies, es

5

Page 9: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

2 ORDINADORS PARAL·LELS

a dir, capac d’executar mes d’un thread de manera simultania, es un ordinador SMP.

Ja hem vist a la seccio anterior, quin es l’esquema basic de funcionament d’un ordinadorsimple, vegem ara com es el d’un ordinador SMP. Suposarem que aquest ordinador estaformat per un unic CPU amb c nuclis capacos d’executar t fils d’instruccions cadascun. Afigura 2 podem veure l’esquema de la memoria d’un processador amb doble nucli i dos nivellsde memoria cau.

Com podem observar, la memoria RAM i la memoria cau de nivell 3 son compartides, esa dir, tots els nuclis hi tenen acces i es igual per a tots. No obstant, en aquest cas veiem quela memoria cau de nivells 1 i 2 no es compartida, sino que cada nucli te la seva. Aquestapropietat es molt important, ja que ens permet la utilitzacio de variables o dades compartidesentre els threads i d’altres no compartides, o privades.

2.3 Eficiencia

Despres d’observar el funcionament basic d’un ordinador i, en especial, com gestiona lamemoria, iniciem aquesta seccio amb l’objectiu de saber programar de manera eficient teninten compte aquest fet.

Com hem vist anteriorment, quan el processador necessita una dada, la copia a la memoriacau i, a mes hi copia les dades veınes. Per exemple, sabem que una matriu s’emmagatzemacom un vector de vectors, es a dir, si volem desar a la memoria una matriu n×n, l’ordinadorla desara en n2 posicions consecutives de la memoria, de manera que les primeres n posicionscorrespondran als n elements de la primera fila, les seguents n als elements de la segona fila,i aixı successivament. Per tant, si un processador necessita accedir a una dada de la matriu,copiara tambe a la memoria cau les dades de les columnes anterior i posterior. Aixı doncs, sila seguent operacio requereix la dada de la columna seguent, ja la tindra disponible.

Vejem un exemple de com l’ordre de les operacions pot tenir un impacte en el tempsd’execucio del programa. Suposem que volem calcular el producte de dues matrius A,B ∈Rn×n i guardar-lo en una tercera matriu C ∈ Rn×n. Aixı doncs, si aij , bij ∈ R son els elementsde la fila i i columna j de les matrius A i B, respectivament, i volem calcular

C = AB

sabent que

cij =n∑

k=1

aikbkj .

L’algoritme 1 es un exemple de com podem realitzar aquest calcul. Observem les primeresoperacions que realitzara l’ordinador si seguim aquest algoritme:

1. C[1][1]← C[1][1] +A[1][1] ∗B[1][1]

2. C[1][1]← C[1][1] +A[1][2] ∗B[2][1]

3. C[1][1]← C[1][1] +A[1][3] ∗B[3][1]

4. C[1][1]← C[1][1] +A[1][4] ∗B[4][1]

6

Page 10: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

2 ORDINADORS PARAL·LELS

d’on podem veure que estem recorrent la matriu B per col·lumnes, de manera que cada vegadaque el processador demana una dada, aquesta no es troba a la memoria cau i l’ha d’anar abuscar a la memoria RAM. Una solucio senzilla es intercanviar els ındexs, de manera que elbucle mes intern de l’algoritme sigui el de les j′s, es a dir, com podem veure a l’algoritme 2.Fent-ho aixı, estem recorrent tant la matriu C com la matriu B per files.

Dades: Les matrius A, B i C, on s’han inicialitzat tots els valors de C a 0.per a i = 1→ n fer

per a j = 1→ n ferper a k = 1→ n fer

C[i][j]← C[i][j] +A[i][k] ∗B[k][j]final

final

finalAlgoritme 1: Producte de matrius. Versio ijk.

Dades: Les matrius A, B i C, on s’han inicialitzat tots els valors de C a 0.per a i = 1→ n fer

per a k = 1→ n ferper a j = 1→ n fer

C[i][j]← C[i][j] +A[i][k] ∗B[k][j]final

final

finalAlgoritme 2: Producte de matrius. Versio ikj.

Programant el producte de matrius utilitzant aquests dos algoritmes i calculant-ne eltems utilitzat, podem veure que, efectivament, si els calculs estan organitzats de manera quel’acces a la memoria sigui eficient, l’estalvi de temps es molt significatiu. Per exemple, sivolem calcular el producte de dues matrius de dimensio 1.000, tardem 24,94 segons utilitzantl’algoritme 1, mentre que utilitzant l’algoritme 2 tardem nomes 3,98 segons; per tant, hemrealitzat els calculs mes de sis vegades mes rapid utilitzant l’algoritme 2.

2.3.1 La multiplicacio de matrius

Seguint l’exemple exposat en l’apartat anterior, la multiplicacio de matrius, podem observarque per cada element de C, cal fer nmultiplicacions i n sumes, es a dir, 2n operacions —sumes,restes, multiplicacions o divisions— i C te n2 elements. Es a dir, el nombre d’operacions quecal fer per multiplicar dues matrius es 2n · n2 = 2n3 i, per tant, te sentit plantejar-nosl’aplicacio de la programacio en paral·lel en aquest metode. Doncs si n es prou gran, laquantitat d’operacions i, per tant, de temps necessari per a dur-les a terme augmenta comn3.

Disposem-nos, doncs, a implementar en paral·lel l’algoritme per multiplicar dues matrius.El primer pas que cal fer es analitzar l’algoritme sequencial, identificant on podrıem tenir

7

Page 11: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

2 ORDINADORS PARAL·LELS

problemes. Observant l’algoritme 2, podem veure que, per a cada element de C, l’algoritmemodifica unicament aquest element, sumant-hi el producte corresponent. La idea doncs, esrepartir els calculs de la manera mes ben distribuıda possible. En aquest cas, com que pera cada element de C, hem de realitzar exactament les mateixes operacions, podem distribuirels elements de la matriu C entre els processadors disponibles. Aixı doncs, les matrius A,B i C s’allotjaran a la memoria compartida, evitant aixı haver d’utilitzar mes memoria dela necessaria, i distribuirem els elements de C entre els processadors disponibles, de maneraque cada processador s’encarregui de calcular, mes o menys, el mateix nombre d’elements.Una estrategia per distribuir els elements de C entre els processadors pot ser, per exemple,anar assignant cada fila de C a un processador, es a dir, els elements de la primera fila elscalculara el primer processador disponible, els elements de la segona fila els calculara el segonprocessador disponible i aixı successivament fins a arribar a la fila p, essent p el nombre deprocessadors disponibles. A partir de llavors, la fila p+ 1 la calcularia el primer processadori repetim el proces fins a tenir tots els elements assignats.

Definicio 2.1. Donat un programa en paral·lel, diem que segueix una estrategia amb carregaequilibrada, si el nombre d’operacions aritmetiques assignades a cada processador que hiinterve es aproximadament el mateix.

En el cas de la multiplicacio de matrius, doncs, com que per calcular tots els elements deC, es requereix el mateix nombre de calculs, qualsevol distribucio d’aquests elements entreels processadors es equitativa. Es a dir, totes les estrategies de distribucio dels elements acalcular entre els processadors son de carrega equilibrada. Altres estrategies de distribuciopodrien ser

1. Dividir les files entre els processadors. Cada processador calcularia les files compresesen un determinat rang.

2. Dividir la matriu en blocs r×r i distribuir cada bloc entre els processadors disponibles,que calcularien els elements del bloc.

No obstant, no tots els problemes son tant facils de paral·lelitzar seguint una estrategiaamb la carrega equilibrada entre els processadors. Per exemple, en el cas de l’algoritmede l’eliminacio Gaussiana, si disposessim de dos processadors i n’utilitzessim el primer percalcular els elements de les n/2 primeres files i el segon per calcular els elements restants,obtindrıem que a partir del pas k = n/2 de l’algoritme, el primer processador no hauria derealitzar cap calcul, ja que ja haurıem obtingut zeros per sota de la diagonal de la matriu ales primeres n/2 files, mentre que el segon processador encara estaria realitzant calculs. Mesendavant parlarem d’aquest cas amb mes detall.

Si compilem aquests codis i comptem el temps que dediquen a realitzar la multiplicaciode matrius, podem observar que, sobretot per a n’s grans, el temps requerit per a fer elscalculs de manera sequencial en un ordinador que disposa d’un processador amb 2 nuclis es,aproximadament, el doble del temps necessari per a fer-los de manera paral·lela, utilitzantels dos nuclis.

8

Page 12: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

2 ORDINADORS PARAL·LELS

N t Sequencial t Paral·lel r

250 0,0658 0,0313 2,10

500 0,4756 0,2487 1,91

750 1,7583 0,9217 1,91

1.000 3,8269 2,0589 1,86

1.250 7,6442 3,8554 1,98

1.500 13,3666 7,4165 1,80

1.750 21,3509 10,6666 2,00

2.000 31,5336 15,6615 2,01

2.250 45,5964 22,2188 2,05

Figura 3: Comparativa del temps —en segons— utilitzat per realitzar el producte de dues ma-trius de dimensio N, segons si s’ha realitzat de manera sequencial o en paral·lel. S’ha utilitzatun ordinador amb 2 nuclis i 4 threads per executar els calculs. r = t Sequencial/t Paral·lel.

2.4 OpenMP

OpenMP es una Interfıcie de Programacio d’Aplicacions (API ) les caracterıstiques del qualestan basades en facilitar la programacio en paral·lel utilitzant memoria compartida. Volser una interfıcie que permeti programar en un ampli ventall d’arquitectures d’ordinadorsSMP. Per altra banda, tambe permet esser utilitzat per programar en ordinadors amb ununic processador, pero que disposa de tecnologies com el multithreading o el multicore. Ames, OpenMP no es un nou llenguatge de programacio, sino que les seves instruccions espoden afegir en un programa sequencial de Fortran, C o C++, descrivint aixı com s’han dedistribuir els calculs entre els threads que s’executaran en diferents processadors o nuclis iper ordenar l’acces a la memoria compartida si calgues.

Aixı doncs, les directrius d’OpenMP indiquen al compilador quines instruccions ha d’e-xecutar en paral·lel i com les ha de distribuir entre els threads que executaran el codi. Unadirectriu d’OpenMP es una instruccio en un format especial que nomes els compiladors d’O-penMP entenen. De fet, es de la forma d’un comentari a Fortran o un pragma a C/C++, demanera que el programa s’executara de la mateixa manera que ho hagues fet abans d’afegir-hiaquestes directrius, si aquest es compilat per un compilador que no suporti OpenMP.

El primer pas a l’hora de crear, a partir d’un programa sequencial, un programa enOpenMP, es identificar els paral·lelismes que conte. Basicament, aixo significa trobar instruc-cions, sequencies d’instruccions, o fins i tot grans regions del codi que poden ser executadesalhora per diferents processadors.

Algunes vegades, aquesta es una tasca senzilla. No obstant, altres vegades caldra reor-ganitzar parts del codi per obtenir sequencies d’instruccions independents. Tambe pot sernecessari substituir algun algoritme per una alternativa que realitza la mateixa tasca peroque ofereix opcions mes facils o eficients de paral·lelitzar. Aixo pot ser una tasca complicadapero, afortunadament, podem trobar tipus de paral·lelismes tıpics dins dels programes i unaamplia varietat d’estrategies per explotar-los.

La idea basica darrere del funcionament del OpenMP consisteix en el que s’anomenamodel fork-join de programacio. A grans trets, aquest model consisteix en que el programa

9

Page 13: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

2 ORDINADORS PARAL·LELS

Figura 4: Esquema de funcionament. Model fork-join.

s’inicia de manera sequencial, executat per un sol thread. Despres, quan aquest es troba unaconstruccio d’OpenMP, crea un equip de threads del qual n’esdeve el master, i col·labora ambels altres threads que formen l’equip per executar el codi contingut a la regio paral·lela demanera dinamica —fork. Un cop finalitzada aquesta regio, nomes el thread original (el masterde l’equip) segueix executant el codi de manera sequencial —join; els altres processadorss’aturen.

Dit d’una altra manera, en primer lloc, el programa es comenca a executar de manerasequencial; quan aquest arriba a una regio que s’ha d’executar en paral·lel, es crea un equipde threads que executen, cadascun d’ells, la part del codi continguda en aquesta regio i,finalment, s’executa la resta del programa de manera sequencial.

Per altra banda, una questio clau en la programacio en paral·lel, com ja hem comentat, esla gestio de la memoria. OpenMP esta basat en el model de memoria compartida; en aquestsentit, per defecte, les dades es comparteixen entre els threads i son visibles per tots ells. Noobstant, en algun cas necessitarem variables que tinguin valors especıfics per cada thread.Quan cada thread te la seva propia copia de la variable, de manera que podria haver-hi unvalor diferent per cada un d’ells, direm que aquesta variable es privada. Per exemple, quanun equip de threads executa un bucle en paral·lel, cada un d’ells necessita el seu propi valorde l’ındex d’iteracio.

10

Page 14: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

3 Metodes directes

Tractar de resoldre sistemes d’equacions lineals es un problema que ens podem trobar anombroses arees de les matematiques i, sobretot, al calcul numeric. Aixı doncs, el problemaque volem resoldre es el d’un sistema d’n equacions lineals amb n incognites, es a dir, unconjunt d’equacions que, podem expressar de forma matricial com

Ax = b , amb A ∈ Rn×n (3.1)

on b, x ∈ Rn tals que

A =

a11 a12 · · · a1na21 a22 · · · a2n...

.... . .

...an1 an2 · · · ann

, b =

b1b2...bn

i x =

x1x2...xn

.

D’aquesta manera el nostre problema es centra en transformar la matriu A tractant d’arribara un sistema d’equacions lineals senzill, el qual siguem capacos de resoldre. Idealment, donatun sistema d’equacions lineals, ens agradaria poder-lo transformar en un d’equivalent —es a dir, amb la mateixa solucio— on A fos la matriu identitat. Tambe podem tractar,simplement, de transformar A en una matriu triangular i resoldre el sistema seguint, perexemple, el metode de substitucio endarrere.

En aquesta seccio ens centrarem en l’analisi dels metodes directes mes habituals de resolu-cio de sistemes lineals, es a dir, els metodes que arriben a la solucio del sistema en un nombrefinit de passos —suposant que podem fer les operacions sense cap error, a la practica arribema una aproximacio de la solucio. Recordarem els metodes classics i mirarem de trobar-ne unaimplementacio en paral·lel.

Els metodes que tractarem en aquesta seccio ja s’estudien al grau de Matematiques i,per tant, no en realitzarem un analisis teoric profund. Simplement ens limitarem a compro-var si els metodes utilitzats es poden implementar en paral·lel de manera eficient o be calreplantejar-los.

Es evident que aquestes implementacions en paral·lel no tindran sentit si la mida delsistema es petita, doncs en aquest cas el temps necessari per executar els metodes es petit.Per tant, suposarem sempre que n es ”gran”4. Per altra banda, suposarem sempre que A esuna matriu regular, doncs si no ho fos el sistema no tindria solucio exacta.

Per altra banda pero, si A es plena5 i no te cap estructura determinada, haurem depoder guardar-la a la memoria de l’ordinador on estiguem executant el metode i aixo, sin es prou gran, pot no ser possible. Suposem, per exemple, que necessitem guardar unamatriu de dimensio 1.000, on els seus coeficients son de tipus double, es a dir, necessitemguardar 10002 elements de tipus double. Tenint en compte que una variable double ocupa8 bytes, necessitarem 10002 × 8 = 8 × 106 bytes (8 MBytes). En canvi, si necessitessimguardar una matriu de dimensio 106, necessitarıem 8 × 1012 bytes (8 TBytes) i aquesta esuna capacitat que actualment no podem trobar als ordinadors i, molt menys, a la memoria

4En aquest context gran vol dir alguns milers.5Diem que una matriu es plena quan la major part dels seus elements son no nuls.

11

Page 15: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

n double float

1.000 8 MB 4 MB

10.000 800 MB 400 MB

25.000 5 GB 2.5 GB

40.000 12.8 GB 6.4 GB

50.000 20 GB 10 GB

100.000 80 GB 40 GB

1.000.000 8 TB 4 TB

Taula 1: Memoria necessaria segons dimensio de la matriu i tipus de dades que conte.

principal. En els ordinadors d’avui en dia, on la memoria principal acostuma a estar entreels 4 i els 32 GB, intentar emmagatzemar matrius que requereixin un espai a la memoriasuperior a aquests valors, obligara a l’ordinador a utilitzar la memoria secundaria, amb totala perdua d’eficiencia que aixo suposa. D’altra banda, per a mides prou grans no podrıem niemmagatzemar tota la matriu a la memoria secundaria. A la figura 1 podem observar quines l’espai que una matriu ocuparia a la memoria segons la mida d’aquesta i el tipus de dadesque contingui.

3.1 Eliminacio Gaussiana

El metode de l’eliminacio Gaussiana (o metode de Gauss-Jordan) es un dels metodes directesmes coneguts i es ampliament utilitzat.

Amb aquest metode volem transformar un sistema d’equacions lineals Ax = b en unUx = c matematicament equivalent, es a dir, que tinguin les mateixes solucions. Aixı doncsmodificarem adequadament la matriu A (i el vector b) per tal d’obtenir un sistema triangularsuperior que es pugui resoldre eficacment amb el metode de substitucio endarrere. Comveurem, aquest metode es util si el que volem resoldre es un sistema lineal que dona lloc auna matriu plena i sense cap estructura. El metode es el seguent:

• Hi ha n− 1 “etapes“.

• En cada una de les etapes (etapa k), canviem les files des de k + 1 fins a n.

• De cada fila, canviem els elements des de k + 1 fins a n + 1. Restant a cada elementl’element de la columna corresponent de la fila k multiplicat pel multiplicador de lafila, que no es mes que l’element de la columna k dividit per l’element de la mateixacolumna pero de la fila k.

Aixı doncs, el seguent algoritme ens calcula l’eliminacio gaussiana:

12

Page 16: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

Dades: La matriu A i el vector b, de termes independents.Resultat: Obtenim una transformacio d’A i b, on A es una matriu diagonal.per a k = 0→ n− 1 fer

per a i = k + 1→ n ferm← A[i][k]/A[k][k];per a j = k + 1→ n fer

A[i][j]← A[i][j]−m ∗A[k][j];finalb[i]← b[i]−m ∗ b[k];

final

finalAlgoritme 3: Eliminacio Gaussiana

Observem que utilitzem una variable m, que es on guardem el multiplicador que estemutilitzant. D’altra banda, cal tenir en compte que cap element de la diagonal pot ser nul,doncs si fos aixı, no podrıem trobar els multiplicador de la columna en questio. Una manerad’evitar aquest fet es el que anomenem pivotatge. Recordem que el pivotatge pot ser parcialo be total.

Definicio 3.1. Anomenem eliminacio Gaussiana amb pivotatge parcial quan a cadaetapa k del metode, s’intercanvia la fila k per la que te a la columna k l’element amb el valorabsolut mes gran.

Definicio 3.2. Anomenem eliminacio Gaussiana amb pivotatge total quan a cadaetapa k del metode, l’element amb el valor absolut mes gran de la submatriu resultant de lainterseccio de les ultimes n − k files i les ultimes n − k columnes, es permuta a la posicio(k, k), intercanviant dues files i dues columnes.

Per tal de realitzar el pivotatge parcial a l’eliminacio gaussiana, simplement podem im-plementar l’algoritme 4.

No obstant, observem que l’algoritme 4 requereix, al pas k, n − k comparacions pera realitzar el pivotatge parcial. Per aquest motiu, realitzar el pivotatge no requereix ungran esforc computacional, mentre que el nombre d’operacions necessaries per dur a termel’algoritme d’eliminacio gaussiana es d’ordre n3.

Disposem-nos doncs a intentar paral·lelitzar aquest metode. La primera pregunta que enshem de fer es si l’algoritme que utilitzem per realitzar els calculs de manera sequencial eseficient o si podem millorar-lo. En el nostre cas, suposarem que l’algoritme 3 es eficient, jaque es un algoritme conegut i vist al Grau de Matematiques.

En segon lloc, observem que a mesura que anem avancant en el metode, els elements d’Aque es modifiquen son cada cop menys. Doncs al pas k modifiquem les files des de k+1 fins an i per tant, com mes ens acostem a n, menys files modifiquem. En aquest sentit, podem con-cloure rapidament que distribuir en blocs les files a calcular entre els processadors, de maneraque el primer processador faci els calculs corresponents a les primeres r = n

no de processadorsfiles no es una bona estrategia, ja que a partir del pas r, el primer processador ja no hauriade realitzar cap calcul, a partir del pas 2r ni el primer ni el segon processador haurien derealitzar cap calcul, etc.

13

Page 17: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

Dades: La matriu A i el vector b, de termes independents i la k del pas corresponent.Resultat: A i b amb pivotatge.r ← k aux← 0;per a i = r + 1→ n− 1 fer

si |A[r][k]| < |A[i][k]| aleshoresr = i;

finalsi r 6= k aleshores

per a j = 1→ n feraux← A[r][j];A[r][j]← A[k][j];A[k][j]← aux;

finalaux← b[k] b[k]← b[r];b[r]← aux;

final

finalAlgoritme 4: Pivotatge al metode d’eliminacio gaussiana.

Per tant, aquesta estrategia de distribucio dels calculs no es de carrega equilibrada. Al-ternativament, la opcio proposada es anar distribuint les files de manera alternada, es a dir,suposant que el nostre ordinador disposa de np processadors disponibles, el processador i rea-litzara els calculs necessaris per actualitzar els valors de les files {i, np+i, 2·np+i, . . . , l·np+i},on l ∈ N tal que l ·np+ i ≤ n pero (l+1) ·np+ i > n. D’aquesta manera tots els processadorsrealitzaran un nombre semblant de calculs. En aquest cas, doncs, per tal de distribuir elscalculs entre els processadors i sigui np el nombre de processadors disponibles, el procedi-ment a seguir sera que cada processador ap ∈ {0, . . . , np − 1} executi, independentment, lamodificacio de l’algoritme 3, detallada en l’algoritme 5.

Dades: La matriu A i el vector b, de termes independents. ap l’identificador delprocessador que executa l’algoritme

Resultat: Obtenim una transformacio parcial d’A i b, on A es una matriu triangularsuperior.

per a k = 0→ n− 1 ferper a i = k + 1 + ap→ n fer

A[i][k]← A[i][k]/A[k][k];per a j = k + 1→ n fer

A[i][j]← A[i][j]−A[i][k] ∗A[k][j];finalb[i]← b[i]−A[i][k] ∗ b[k];

finali← i+ np;

finalAlgoritme 5: Eliminacio Gaussiana en paral·lel

Implementant aquest algoritme en C, podem comprovar que els temps d’execucio es re-

14

Page 18: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

dueix considerablement (veure Taula 2).

N t Sequencial t Paral·lel r

250 0,0213 0,0141 1,51

500 0,1635 0,1055 1,55

750 0,5636 0,2972 1,90

1.000 1,3362 0,7004 1,91

1.250 2,5038 1,2779 1,96

1.500 4,5462 2,2619 2,01

1.750 7,2964 3,6316 2,01

2.000 10,2466 5,2201 1,96

2.250 15,0761 7,3744 2,04

Taula 2: Comparativa del temps —en segons— utilitzat per realitzar el metode d’eliminaciogaussiana, segons si s’ha realitzat de manera sequencial o en paral·lel. S’ha utilitzat unordinador amb 2 nuclis i 4 threads per executar els calculs. r = t Sequencial/t Paral·lel

D’aquesta manera, hem obtingut un algoritme per a realitzar el metode de Gauss–Jordanen paral·lel, modificant mınimament l’algoritme original (algoritme 3), simplement distribuintels calculs de manera adient.

3.2 Factoritzacio LU

En aquest metode, l’objectiu es factoritzar la matriu del sistema lineal, A, en producte dedues matrius: una matriu triangular inferior, L, amb 1’s a la diagonal i una matriu triangularsuperior, U . D’aquesta manera obtenim Ax = LUx = b. La particularitat d’aquest sistema,a diferencia del metode d’eliminacio Gaussiana, es que no requereix aplicar el metode diversesvegades si volem resoldre el sistema per a diferents vectors de termes independents b. Es adir, la factoritzacio LU no depen de b.

De la mateixa manera que en l’eliminacio gaussiana, aquest metode ens sera util si elsistema d’equacions que volem resoldre te per matriu associada, una matriu plena i sense capestructura de mida no molt gran.

Si, a mes, hi afegim pivotatge parcial, que d’una manera semblant a l’utilitzat en l’elimi-nacio gaussiana, al pas k situa l’element mes gran dels que queden per eliminar de la columnak, a la diagonal. No obstant, en aquest cas, hem d’afegir una matriu P de permutacions,que reculli els pivotatges realitzats. D’aquesta manera, si hem obtingut les matrius L i U —realitzant les permutacions P a fi de dur a terme el pivotatge— tals que PA = LU , aleshorespodem resoldre el sistema d’equacions lineals Ax = b en dos passos:

• En primer lloc considerem z ∈ Rn i resolem el sistema triangular inferior Lz = Pb,

• en segon lloc, utilitzant el vector z obtingut en el pas anterior, resolem el sistematriangular superior: Ux = z, obtenint x tal que Ax = b ⇐⇒ PAx = Pb, doncs

Lz = Pb⇔ z = L−1PbUx = z ⇔ x = U−1z

}⇒ PAx = LUx = LUU−1L−1Pb = Pb

15

Page 19: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

Un resultat ja conegut es el seguent:

Teorema 3.3. Si A ∈ Rn×n admet eliminacio Gaussiana sense pivotatge, aleshores A admetla factoritzacio LU on

L =

1 0 0 · · · 0m21 1 0 · · · 0m31 m32 1 · · · 0

......

. . .. . . 0

mn1 mn2 · · · mn(n−1) 1

amb mij els multiplicadors de l’eliminacio Gaussiana per a i > j i U es la matriu final del’eliminacio Gaussiana.

D’aquesta manera podem implementar el metode de la factoritzacio LU simplement rea-litzant els mateixos passos que a l’eliminacio Gaussiana i guardant els multiplicadors. Aixıdoncs seguint els seguents passos

1. Calen n− 1 passos,

2. Al pas k−essim: Eliminem els k−1 elements de sota la diagonal de la columna k−essima—actualitzant tots els elements de sobre la diagonal de cada fila— i els substituım pelsmultiplicadors mik de l’eliminacio Gaussiana.

obtenim una transformacio de la matriu A on els elements que estan estrictament per sotala diagonal son els elements tambe de sota la diagonal de la matriu L i els elements de sobrela diagonal —en aquest cas incloent la diagonal— son els elements de la matriu U .

De la mateixa manera que en el metode anterior, podem afegir-hi pivotatge per assegurarque la matriu es diagonal dominant. El seguent algoritme, donada una matriu A, calcula lesmatrius L i U , guardant-les a la mateixa matriu A, de manera que els elements que es trobenestrictament per sota de la diagonal d’A son els elements no nuls i diferents de 1 de L i elsque es troben a la diagonal i per sobre d’aquesta, son els elements no nuls d’U .

Dades: La matriu A i el vector b, de termes independents.Resultat: Obtenim una transformacio de la matriu A amb la informacio essencial de

les matrius L i U de la factoritzacio LU.per a k = 0→ n− 1 fer

per a i = (k + 1)→ n ferA[i][k]← A[i][k]/A[k][k];per a j = k + 1→ n fer

A[i][j]← A[i][j]−A[i][k] ∗A[k][j];final

final

finalAlgoritme 6: Factoritzacio LU

Com podem observar, aquest algoritme es essencialment igual al de l’eliminacio gaussiana,pero desant els multiplicadors a sota de la diagonal. Una estrategia per paral·lelitzar-lo podria

16

Page 20: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

ser la mateixa que hem utilitzat per l’EG. No obstant, per il·lustrar altres maneres d’aplicarla programacio en paral·lel, considerem la variant del metode de factoritzacio LU que espresenta a continuacio.

3.2.1 Factoritzacio LU a blocs

Considerem, donada una matriu n× n A, la seguent divisio en p× p blocs de k× k elements—suposem doncs, que n = p · k.

A00 A01

A10 A11

(3.2)

On A00 es un unic bloc de k × k elements, A01 es una fila de p − 1 blocs k × k, A10 es unacolumna de p − 1 blocs k × k i A11 es una matriu formada per p − 1 × p − 1 blocs de k × kelements. D’aquesta manera, suposant que A factoritzi en LU :

A00 A01

A10 A11

=

L00 L01

L10 L11

U00 U01

U10 U11

(3.3)

i d’aquesta equacio se’n despren immediatament que:

A00 = L00U00 +

0︷ ︸︸ ︷L01U10 (3.4)

A01 = L00U01 +

0︷ ︸︸ ︷L01U11 (3.5)

A10 = L10U00 +

0︷ ︸︸ ︷L11U10 (3.6)

A11 = L10U01 + L11U11 (3.7)

D’aquesta manera, l’equacio (3.4) no es res mes que una factoritzacio LU de dimensio mesreduıda i d’on, per tant, en podem obtenir els blocs L00 i U00 de manera relativament senzilla;de l’equacio (3.5) en podem obtenir U01 resolent el sistema d’equacions lineals resultant deconsiderar la matriu triangular L00 i cada una de les columnes de la matrius A01, com avector de termes independents i les columnes de U01 com a vector d’incognites. De maneraanaloga, a partir de l’equacio (3.6) podem obtenir els valors de la matriu L10. Finalment, del’equacio (3.7), que podem reescriure de la manera seguent:

L11U11 = A11 − L10U01

17

Page 21: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

de manera que la part dreta de l’equacio es coneguda i ens permet calcular directament lamatriu L11U11 que ens donara lloc a una nova matriu A′, de dimensio mes reduıda on tornara aplicar aquest metode.

En primer lloc, aplicant una adaptacio de l’algoritme 6 al bloc A00, de manera que calculitambe els coeficients de del bloc L01 —que, com sabem, no son res mes que els multiplicadorsdel metode de l’eliminacio Gaussiana—, obtenint aixı la seguent factoritzacio:

A00

A10

=

L00

L10

U00 (3.8)

En segon lloc, ens cal resoldre el sistema triangular inferior amb matriu de termes indepen-dents:

L00U01 = A01 (3.9)

que es senzilla de resoldre utilitzant el metode de substitucio endarrere amb les modificacionsnecessaries per adaptar-lo al problema de quan hi ha una matriu de termes independents encomptes d’un vector. En aquest punt, tenim la factoritzacio parcial

A =

L00 0

L10 Id(p−1)k

Idk 0

0 A∗11

U00 U01

0 Id(p−1)k

(3.10)

onA∗11 = A11 − L10U01. (3.11)

Ara, tornem a aplicar el mateix metode a la matriu A∗11 per obtenir

A =

L00 0

L10

L00 0

L10 Id(p−1)k

Idk 0

0 A∗11

U00 U01

0 Id(p−1)k

. (3.12)

Repetint aquest proces p− 1 nomes ens quedara per calcular un bloc de k× k elements, el dela part inferior dreta, que es pot calcular directament. Obtenint la factoritzacio LU buscada.

3.2.2 Paral·lelitzant LU a blocs

Suposem que tenim una matriu A de la qual en volem calcular la factoritzacio LU . Conside-rem la divisio (3.2) d’A en blocs i realitzem una distribucio dels processadors entre els p× pblocs de la matriu A, de manera que cada processador realitzi els calculs necessaris pels blocsque li han estat assignats. Aixı doncs, si disposem d’un ordinador amb np = pr × pc proces-sadors o threads disponibles, els distribuirem en forma de graella —com un tauler d’escacs—de manera que assignarem una parella (i, j) a cada processador on i ∈ {0, . . . , pr − 1} i

18

Page 22: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

j ∈ {0, . . . , pc−1}. D’aquesta manera, per exemple, si hem distribuıt la matriu A en 6×6 blocsde k×k elements i disposem de 4 processadors (distribuint-los de manera que pr = 2, pc = 2)obtenim la distribucio dels blocs entre els processadors disponibles que es pot observar a lafigura 5.

proc(0, 0)

A00

proc(0, 1)

A01

proc(0, 0)

A02

proc(0, 1)

A03

proc(0, 0)

A04

proc(0, 1)

A05

proc(1, 0)

A10

proc(1, 1)

A11

proc(1, 0)

A12

proc(1, 1)

A13

proc(1, 0)

A14

proc(1, 1)

A15

proc(0, 0)

A20

proc(0, 1)

A21

proc(0, 0)

A22

proc(0, 1)

A23

proc(0, 0)

A24

proc(0, 1)

A25

proc(1, 0)

A30

proc(1, 1)

A31

proc(1, 0)

A32

proc(1, 1)

A33

proc(1, 0)

A34

proc(1, 1)

A35

proc(0, 0)

A40

proc(0, 1)

A41

proc(0, 0)

A42

proc(0, 1)

A43

proc(0, 0)

A44

proc(0, 1)

A45

proc(1, 0)

A50

proc(1, 1)

A51

proc(1, 0)

A52

proc(1, 1)

A53

proc(1, 0)

A54

proc(1, 1)

A55

Figura 5: Distribucio dels blocs entre els processadors.

Aixı doncs, seguirem els seguents passos:

1. En primer lloc, el que anomenarem processador pivot calculara la factoritzacio LU delbloc A00 i cada un dels altres processadors calculara, per a cada pas k del metode LUels multiplicadors del metode de l’EG corresponents als blocs que te assignats.

2. En segon lloc, cada un dels processadors, resoldra per a cada un dels blocs que teassignats, el sistema triangular inferior

A0i = L00U0i (3.13)

On la i indica quin dels processadors realitzara els calculs, en correspondencia a l’as-signacio que hem realitzat per aquest metode.

19

Page 23: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

3. Finalment, calcularem els coeficients restants de la matriu A, seguint l’equacio (3.11).Cada processador calculara els coeficients dels blocs que te assignats.

Un cop finalitzat aquest proces, el repetirem amb la submatriu resultant A∗11 fins que nomesquedi un sol bloc d’A per calcular, l’App, del que se’n calculara la factoritzacio LU de manerasequencial.

3.3 Factoritzacio de Cholesky

En les seccions anteriors ja hem vist metodes generals per resoldre sistemes que donen lloc amatrius plenes. No obstant, tambe hem vist que ens podem trobar amb matrius amb algunaestructura determinada, es a dir, amb molts zeros o que tinguin una determinada propietat.En casos aixı, podem simplificar els metodes i evitar fer calculs innecessaris. Un exempled’aquest tipus de matrius son les matrius simetriques definides positives. Comencem perrecordar la definicio de matriu definida positiva.

Definicio 3.4. Una matriu A ∈ Rn×n simetrica es definida positiva si xTAx > 0 per atot vector no nul x ∈ Rn.

Teorema 3.5 (Factoritzacio de Cholesky). Sigui A ∈ Rn×n, simetrica i definida positiva,aleshores existeix una unica matriu triangular inferior G ∈ Rn×n amb tots els elements de ladiagonal positius i tal que A = GGT .

Demostracio. Teorema vist al grau de Matematiques, la demostracio es pot trobar a [2],pagina 163. �

El seguent algoritme, descriu com calcular la factoritzacio de Cholesky. Aprofitant que lamatriu A es simetrica, es guarden els coeficients de G —que, com hem vist, es una matriutriangular inferior— al triangle inferior d’A.

Ara, per resoltre el sistema Ax = b, nomes ens cal resoldre els sistemes triangulars inferiorsi superiors, Gy = b i GTx = y i, aleshores, b = Gy = G(GTx) = GGTx = Ax.

Dades: La matriu A.Resultat: Obtenim una transformacio d’A, on per a tot i ≥ j, substitueix aij per gijper a j = 0→ n− 1 fer

per a i = j → n− 1 fersi j > 0 aleshores

per a k = 0→ j − 1 ferA[i][j]← A[i][j]−A[i][k] ∗A[j][k];

final

final

A[i][j]← A[i][j]/√A[j][j];

final

finalAlgoritme 7: Factoritzacio de Cholesky

20

Page 24: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

Proceddim a paralelitzar-ho, seguint, simplement una distribucio de les files de la matriuA que ens assigna a cada thread n/np files.

A mes, notem que el nombre d’operacions requerides per realitzar aquest metode es lameitat que per a Gauss-Jordan. Finalment, una de les propietats de les matrius simetriquesi definides positives es que no cal realitzar pivotatge.

3.4 Reduccio cıclica

En les seccions anteriors hem vist com podem paral·lelitzar alguns metodes. En concret hemestudiat metodes especialment adients si la matriu a tractar es plena i sense cap estructura—o be simetrica i definida positiva en el cas del metode de Cholesky.

Observem pero que passa si ens trobem amb una matriu A, per exemple, tridiagonal, esa dir, de la forma

A =

a1 b1 0 · · · 0c2 a2 b2 0 0

0 c3. . .

. . ....

.... . .

. . . an−1 bn−10 · · · 0 cn an

. (3.14)

Si intentem aplicar el metode de l’eliminacio gaussiana en aquesta matriu, a cada pas knomes hem d’eliminar un sol element, el de sota la diagonal. Si a mes, intentem realitzar-hoen paral·lel utilitzant l’algoritme 5, tots els calculs els realitzara un unic processador d’entreels disponibles, desaprofitant aixı la gran part de la capacitat de calcul de l’ordinador. Doncsobservant l’algoritme, podem veure que al pas k distribuım les files a actualitzar (de la k+1a la n) entre els processadors disponibles, pero observem que a partir de la fila k + 2 totsels calculs a realitzar son iguals a 0. Per tant, l’unlic processador que realitzara calculssignificatius sera el primer. A mes, els metodes anteriors no aprofitarien la propietat de sertridiagonal.

Per aquest motiu, el que ens cal es replantejar el metode o trobar-ne un d’alternatiu. Mesconcretament, dedicarem les seguents pagines a l’estudi d’un metode senzill6 —diferent alsvistos fins ara— per resoldre sistemes lineals on la matriu A es tridiagonal.

Considerem doncs el sistema

Ax = r (3.15)

on A ∈ Rn×n es una matriu de la forma 3.14, x = (x1, . . . , xn) i r = (r1, . . . , rn). Sabem,com sempre, que aquest sistema te una unica solucio per a un vector r donat si A no es unamatriu singular. L’estrategia que seguirem es la de dividir la matriu del sistema, A, en blocsen els quals procedirem a aplicar l’eliminacio gaussiana de manera simultania, utilitzant totsels processadors disponibles. D’aquesta manera, diagonalitzarem A. En primer lloc escolliremla mida dels blocs k, per simplificar suposarem que k|n,

6Metode extret de l’article [4].

21

Page 25: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

3 METODES DIRECTES

Figura 6: Distribucio dels elements no nuls d’A.

a1 b1

c2 a2

. ..

...

... bk−1

ck ak bkck+1 ak+1 bk+1

ck+2 ak+2

...

...

... b2k−1

c2k a2k b2kc2k+1

...

.. .

.. .

bn−kcn−k+1 an−k+1 bn−k+1

cn−k+2 an−k+2

...

...

... bn−1

cn an

1. Dividim la matriu en blocs k × k tal com es mostra a la figura 6, que tambe es unamatriu tridiagonal per blocs.

2. Eliminem c2, ck+2, c2k+2, . . . cn−k+2 de manera simultania, despres eliminem c3, ck+3,c2k+3, . . . cn−k+3 i aixı successivament fins a eliminar els elements ck, c2k, c3k, . . . cn.D’aquesta manera, obtenim una matriu triangular superior excepte per les columnesk, 2k, 3k, . . . , n − k on hi podem trobar altres elements no nuls, creats durant aquestpas.

3. A continuacio eliminem totes les b′s exceptuant les que es troben en les columnesk, 2k, 3k, . . . , n− k. Ho fem en aquest ordre, primer b2, bk+2, b2k+2, . . . bn−k+2 de mane-ra simultania, despres eliminem b1, bk+1, b2k+1, . . . bn−k+1 i aixı successivament fins aeliminar els elements bk, b2k, b3k, . . . bn−k. D’aquesta manera, obtenim una matriu dia-gonal excepte per les columnes k, 2k, 3k, . . . , n−k, n on hi podem trobar altres elementsno nuls, creats durant aquest pas. Els elements no nuls son les f’s i les g’s de la figura .

4. Ara, podem triangularitzar la matriu eliminant els elements no nuls de sota de ladiagonal de les columnes k, 2k, 3k, . . . , n− k, n.

5. Finalment podem diagonalitzar la matriu eliminant els elements no nuls de sobre ladiagonal de les columnes k, 2k, 3k, . . . , n− k, n.

22

Page 26: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

4 Metodes iteratius

En les properes seccions, intentarem modificar alguns dels metodes iteratius de resolucio desistemes d’equacions lineals mes coneguts introduint-hi la computacio en paral·lel. Aquestsmetodes seran el metode de Jacobi, el metode de Gauss-Seidel i el metode SOR, tots vistosal grau de Matematiques. Finalment, n’introduirem un d’addicional, el metode del gradientconjugat, que estudiarem mes a fons.

En primer lloc, recordem que donat un sistema lineal Ax = b, com el considerat en elscapıtols anteriors, un metode iteratiu es aquell que tracta d’arribar a la solucio d’aquestsistema utilitzant una primera aproximacio a aquesta, que va modificant a cada iteracio.Aixı doncs, una de les propietats mes importants que ha de tenir un metode d’aquest tipuses la convergencia de les aproximacions cap a la solucio del sistema.

4.1 Jacobi

Com sempre, el problema plantejat es el de trobar una solucio al sistema d’equacions linealsAx = b amb A regular i, a mes, suposem aii 6= 0 per a tot i. Observem que

n∑j=1

aijxj = bj , i = 1, . . . , n⇒ aiixi +∑j 6=i

aijxj = bi, i = 1, . . . , n.

A mes, aıllant la component i-essima del vector x en aquesta equacio, podem obtenir que

xi =1

aii

bi −∑j 6=i

aijxj

, i = 1, . . . , n. (4.1)

A partir d’aquest resultat, podem generar una successio de vectors x(k), on les componentsd’aquests es calculen seguint

x(k+1)i =

1

aii

bi −∑j 6=i

aijx(k)j

, i = 1, . . . , n. (4.2)

que descriu l’anomenat metode de Jacobi.

Observem tambe que si escrivim A = L + D + U , on L es una matriu triangular inferioramb els elements de sota la diagonal d’A, D = diag{a11, a22, . . . , ann} i U es una matriutriangular superior amb els elements que es troben estrictament per sobre de la diagonal d’A,podem reescriure (4.2) com

x(k+1) = BJx(k) + c (4.3)

On BJ = −D−1(L+ U) i c = D−1b.

Es pot comprovar que, efectivament, sota les condicions adequades (4.3) te un punt fix iaquest es solucio del sistema. No obstant, aquest es un resultat ja conegut i estudiat al Graui, per tant, el suposarem. El lector interessat en saber-ne els detalls, els pot trobar al capıtol4 de [3].

23

Page 27: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

Dades: La matriu A, una aproximacio de la solucio x, el vector b i una tolerancia tol.Resultat: Obtenim una solucio x segons la tolerancia donada.inicialitzem un vector x′;mentre |x− x′| > tol fer

x′ ← x;per a i = 0→ n− 1 fer

x[i]← b[i];per a j = 0→ n− 1 fer

si i 6= j aleshoresx[i]← x[i]−A[i][j] ∗ x′[j];

final

finalx[i]← x[i]/A[i][i];

final

finalAlgoritme 8: Metode de Jacobi.

L’algoritme 8 realitza aquest metode. Notem que cal utilitzar, a cada pas k, la solucioobtinguda en el pas anterior. Observem en primer lloc que aquest metode, si la matriu A teuna certa estructura (p.e. es una matriu escassa7, matriu tridiagonal...) podem simplificar elcalcul (L+U)x(k). Aquest fet ens porta a que metodes d’aquest tipus s’acostumin a utilitzarquan la matriu A es escassa, ja que en aquests casos, podem simplificar els calculs. En canvi,utilitzant metodes com els vistos en el capıtol anterior, no aprofitem aquesta propietat.

D’altra banda, si el que volem es paral·lelitzar aquest metode, observem que es moltsimple, doncs nomes ens cal distribuir, per a cada iterat, els elements del vector x entreels processadors disponibles. La manera mes eficient de fer-ho, tenint en compte l’accesa la memoria, sera dividir les n components del vector x(k+1) entre els np processadorsdisponibles. De manera que cada un dels processadors actualitzi components consecutivesdel vector x(k+1). L’algoritme 9 descriu quins calculs ha de realitzar cada thread.

4.2 Gauss-Seidel

Amb la finalitat de millorar el metode de Jacobi, considerem (4.2) i ho reescrivim com

x(k+1)i =

1

aii

bi −∑j<i

aijx(k)j −

∑j>i

aijx(k)j

, i = 1, . . . , n (4.4)

es a dir, hem dividit el sumatori diferenciant entre les j′s que es troben per sota la diagonali les que es toben per sobre d’aquesta. Ara, com que els elements del vector x, sj tals quej < i ja estan actualitzats pels passos anteriors, podem utilitzar els nous valors —els del pas

7Diem que una matriu es escassa quan la major part dels seus elements son nuls.

24

Page 28: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

Dades: La matriu A, una aproximacio de la solucio x, el vector b, una tolerancia tol,np el nombre de threads disponibles i jo l’identificador del thread que estaexecutant l’algoritme.

Resultat: Obtenim una solucio x segons la tolerancia donada.inicialitzem un vector x′;mentre |x− x′| > tol fer

x′ ← x;per a i0 = jo ∗ (n/np)→ n fer

per a i = i0→ i0 + n/np ferx[i]← b[i];per a j = 0→ n− 1 fer

si i 6= j aleshoresx[i]← x[i]−A[i][j] ∗ x′[j];

final

finalx[i]← x[i]/A[i][i];

finali0← i0 + n/np;

final

finalAlgoritme 9: Metode de Jacobi en paral·lel.

k + 1— en comptes d’utilitzar els del pas anterior. Per tant, podem reescriure-ho com

x(k+1)i =

1

aii

bi −∑j<i

aijx(k+1)j −

∑j>i

aijx(k)j

, i = 1, . . . , n (4.5)

Finalment, utilitzant la descomposicio matricial A = L + D + U , podem escriure el metodede Gauss-Seidel com

x(k+1) = BGSx(k) + cGS (4.6)

on BGS = −(D + L)−1U i cGS = (D + L)−1b.

4.3 SOR

Pel que fa a aquest metode, anomenat tambe metode de sobrerelaxacio, es, de manera similaral metode de Gauss-Seidel, una modificacio del metode de Jacobi per tal de millorar-lo. Aixıdoncs, partint de (4.5), el metode de Gauss-Seidel, podem obtenir

x(k+1)i = x

(k)i +

1

aii

bi −∑j<i

aijx(k+1)j −

∑j≥i

aijx(k)j

, i = 1, . . . , n (4.7)

on l’unic que hem fet es considerar tambe el producte aijx(k)j quan i = j, que es cancel·la

amb el terme x(k)i que hem afegit a l’equacio. D’aquesta manera podem veure que

x(k+1)i = x

(k)i + r

(k)i , i = 1, . . . , n (4.8)

25

Page 29: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

Dades: La matriu A, una aproximacio de la solucio x, el vector b i una tolerancia tol.Resultat: Obtenim una solucio x segons la tolerancia donada.inicialitzem un vector x′;mentre |x− x′| > tol fer

x′ ← x;per a i = 0→ n− 1 fer

x[i]← b[i];per a j = 0→ n− 1 fer

si i > j aleshoresx[i]← x[i]−A[i][j] ∗ x[j];

finalsi i < j aleshores

x[i]← x[i]−A[i][j] ∗ x′[j];finalx[i]← x[i]/A[i][i];

final

final

finalAlgoritme 10: Metode de Gauss-Seidel

on r(k)i = 1

aii

[bi −

∑j<i aijx

(k+1)j −

∑j≥i aijx

(k)j

]. Es a dir, obtenim cada aproximacio de la

solucio sumant a l’aproximacio anterior un valor. El metode de SOR, doncs, consisteix enafegir un parametre ω ∈ R tal que millori el metode de Gauss–Seidel:

x(k+1)i = x

(k)i + ωr

(k)i , i = 1, . . . , n (4.9)

observem que si ω = 1, aquest metode es equivalent al metode de Gauss–Seidel. En formamatricial, podem escriure el metode de SOR de la manera seguent

x(k+1) = BSOR(ω)x(k) + c(ω) (4.10)

on BSOR(ω) = (I + ωD−1L)−1[(1− ω)I − ωD−1U ] i c(ω) = (I + ωD−1L)−1ωD−1b.

Finalment, podem observar que el metode SOR, juntament amb el metode de Gauss-Seidelno paral·lelitzen be. Ja a simple vista notem una diferencia clau amb el metode de Jacobi—que, com hem vist, paral·lelitza d’una manera molt senzilla—, doncs a diferencia d’aquest,per actualitzar cada component de SOR —en particular, de Gauss-Seidel— necessitem elscomponents anteriors. Es a dir, per actualitzar la component i-essima del vector x(k), neces-

sitem haver actualitzat ja totes les components x(k)s tals que s < i. O, dit d’una altra manera,

nomes podem actualitzar una component a la vegada.

L’unic que podrıem fer seria paral·lelitzar els productes escalars que conte el metode.

4.4 Metode del Gradient conjugat

Els metodes que hem vist fins ara ens poden ser de molta utilitat en determinats casos,depenent de l’estructura de la matriu del sistema. No obstant, a vegades aquests metodes

26

Page 30: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

poden no funcionar o tenir un cost computacional molt elevat. Per exemple, a vegades escollirde manera adient el parametre ω del metode SOR, pot ser una tasca molt difıcil. En aquestaseccio que iniciem, ens centrarem en el metode del gradient conjugat, un metode no vistal Grau de Matematiques i que, per tant, analitzarem en profunditat.

Comencem doncs suposant que tenim una matriu A ∈ Rn×n simetrica i definida positiva,un vector B ∈ Rn i que volem trobar la solucio x∗ del sistema

Ax = b

Observem, en primer lloc, que aquest problema es equivalent a resoldre el problema d’op-timitzacio

minx∈Rn

φ(x) (4.11)

on

φ(x) =1

2xTAx− xT b. (4.12)

Ja que φ es convexa i el seu gradient es

∇φ(x) = Ax− b. (4.13)

D’aquesta manera, si xc es una aproximacio del valor de x que minimitza φ, aleshores xc espot considerar una solucio aproximada del sistema Ax = b. Per veure-ho, definim la A-normacom

‖v‖A =√vTAv. (4.14)

En segon lloc, sabem que x∗, pel fet de ser solucio del sistema, es un mınim de φ i de l’equacio

(4.12) se’n dedueix que φ(x∗) = −1

2bTA−1b, doncs Ax∗ = b ⇐⇒ x∗ = A−1b i

φ(x∗) =1

2xT∗Ax∗ − xT∗ b

=1

2(A−1b)TAA−1b− (A−1b)T b

= −1

2bTA−1b

Ara,

φ(xc) =1

2xTc Axc − xTc b, (4.15)

substituint b per Ax∗ obtenim

φ(xc) =1

2xTc Axc − xTc Ax∗ =

1

2xTc Axc −

1

2xTc Ax∗ −

1

2xTc Ax∗ (4.16)

=1

2xTc A(xc − x∗)−

1

2xTc Ax∗, (4.17)

27

Page 31: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

sumant i restant 12x

T∗A(xc − x∗) a la part dreta de la igualtat obtenim

φ(xc) =1

2xTc A(xc − x∗)−

1

2xTc Ax∗ +

1

2xT∗A(xc − x∗)−

1

2xT∗A(xc − x∗) (4.18)

=1

2(xc − x∗)TA(xc − x∗)−

1

2xTc Ax∗ +

1

2xT∗A(xc − x∗) (4.19)

=1

2(xc − x∗)TA(xc − x∗)−

1

2xTc Ax∗ +

1

2xT∗Axc −

1

2xT∗Ax∗ (4.20)

=1

2(xc − x∗)TA(xc − x∗)−

1

2bTA−1b (4.21)

=1

2‖xc − x∗‖2A + φ(x∗). (4.22)

on a (4.20) hem utilitzat que A es una matriu quadrada, simetrica i definida positiva, demanera que defineix un producte escalar, que es commutatiu. D’aquesta manera, una iteracioque produeixi aproximacions cada vegada mes bones de xc, es una iteracio que produeixaproximacions a la solucio del sistema tambe cada vegada mes bones. Es a dir, el que volemes trobar algun metode iteratiu que a cada pas, ens doni una millor aproximacio xc de lasolucio x∗.

Una primera idea per trobar el mınim de (4.12) es el metode anomenat maxima pendent,ja vist al Grau de Matematiqes. A grans trets, aquest metode busca el mınim de la funcioa partir d’una aproximacio d’aquest i aproximant-s’hi per la direccio amb el decreixementmes rapid, i.e., la direccio del gradient negatiu. No obstant, podem millorar aquest metodeampliant la dimensio de l’espai on busquem el mınim a cada pas. En primer lloc, recordemque es un espai afı.

Definicio 4.1. Sigui, v ∈ Rn un vector i S ⊆ Rn un subespai, aleshores

v + S = {x|x = v + s, s ∈ S}

es un espai afı.

Donada doncs, una primera aproximacio x0 —es a dir, tal que Ax0 ≈ b—, volem crearuna successio de subespais encaixats

S1 ⊂ S2 ⊂ S3 ⊂ . . . ⊂ Sn ⊂ Rn

que compleixin que dim(Sk) = k i, amb aquests, resoldre el problema

minx∈x0+Sk

φ(x) (4.23)

per cada pas k. Ara, si anomenem xk el minimitzador del pas k, aleshores, degut a que elssubespais son encaixats, tenim que φ(x1) ≥ φ(x2) ≥ . . . φ(xn) = φ(x∗). Com que Sn = Rn, al’ultim pas obtenim que x∗ = A−1b. Observem, per tant, que aquest metode es un metodedirecte, doncs arribem a la solucio desitjada amb un nombre finit de passos. No obstant, adiferencia dels metodes directes estudiats anteriorment, a cada pas k obtenim una aproximaciode x∗ millor que l’anterior. Al contrari que amb els metodes de Gauss-Jordan o LU, que finsque no hem realitzat els n passos, no tenim res.

28

Page 32: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

No obstant la convergencia de xc cap a la solucio pot ser molt rapida inicialment, pero apartir d’un determinat n, la convergencia sigui molt mes lenta. A mes, a la practica, l’errorque arrossegarem amb els calculs ens impedeix arribar a una solucio exacta. D’aquestamanera, el nostre objectiu sera trobar una cadena de subespais que impliqui un decreixementrapid del valor de φ, per la que siguem capacos d’aturar la iteracio abans que k = n.

Amb aquest objectiu, observem que al pas k, a xk la funcio φ decreix mes rapidament enla direccio del gradient negatiu. En aquest sentit, escollim Sk+1 de tal manera que continguixk i el gradient gk = ∇φ(xk) = Axk − b. Aquesta estrategia garanteix que xk+1 es, com amınim, tant bona com amb el metode de maxima pendent.

4.4.1 Una primera versio del metode

Suposem ara que A ∈ Rn×n es gran, escassa, simetrica i suposem que volem calcular algunsdels seus valors propis mes grans o mes petits. Direm que els valors propis mes grans omes petits de l’espectre d’una matriu son valors propis extrems. Aquest problema pot serresolt mitjancant l’anomenat metode de Lanczos. Aquest metode genera una successio dematrius tridiagonals {Tk} amb la propietat que els valors propis extrems de Tk ∈ Rk×k sonprogressivament millors aproximacions dels valors propis extrems d’A.

En primer lloc, suposem que λ1(A), . . . , λn(A) son els valors propis de la matriu A i quehem escollit els ındexs de manera que

λ1(A) ≤ λ2(A) ≤ . . . ≤ λn−1(A) ≤ λn(A)

En segon lloc, considerem l’optimitzacio del quocient de Rayleigh

r(x) =xTAx

xTx, x 6= 0.

utilitzant el seguent teorema

Teorema 4.2. Sigui A ∈ Rn×n una matriu simetrica, aleshores

λk(A) = maxdim(S)=k

min06=y∈S

yTAy

yT y

per a tot k ∈ {1, . . . , n}.

Per tant, els valors maxim i mınim de r(x) son, respectivament λ1(A) i λn(A). Suposemara {qi} ⊆ Rn, una successio de vectors ortonormals i definim els escalars Mk i mk com

Mk =λ1(QTkAQk) = max

y 6=0

yT (QTkAQk)y

yT y= max‖y‖2=1

r(Qky) ≤ λ1(A),

mk =λk(QTkAQk) = min

y 6=0

yT (QTkAQk)y

yT y= min‖y‖2=1

r(Qky) ≥ λn(A),

on Qk = (q1| · · · |qk). Com que8

ran(Q1) ⊂ ran(Q2) ⊂ · · · ⊂ ran(Qn) = Rn

8Definim ran(A) = {b ∈ Rn|∃x ∈ Rn : Ax = b}

29

Page 33: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

tenim que

M1 ≤M2 ≤ · · · ≤Mn =λ1(A),

m1 ≥ m2 ≥ · · · ≥ mn =λn(A).

Considerem ara el gradient

∇r(x) =2

xTx(Ax− r(x)x). (4.24)

Suposem uk ∈ 〈q1, . . . , qk〉 tal que Mk = r(uk). Si ∇r(uk) = 0, aleshores (r(uk), uk) es unaparella valor-vector propi. En cas contrari, amb la idea de fer Mk+1 tant gran com siguipossible, te sentit prendre, com al seguent vector qk+1 tal que

∇r(uk) ∈ 〈q1, . . . , qk+1〉.

Ja que r(x) augmenta mes rapidament en la direccio del gradient ∇r(x). De la mateixamanera, si vk ∈ 〈q1, . . . , qk〉 satisfa que mk = r(vk), escollirem el seguent vector qk+1 tal que

∇r(vk) ∈ 〈q1, . . . , qk+1〉,

ja que r(x) disminueix mes rapidament en la direccio −∇r(x). Observem que per a qualsevolx ∈ Rn

∇r(x) ∈ 〈x,Ax〉.

Per tant, com que uk, vk ∈ 〈q1, . . . , qk〉, tenim

〈q1, . . . , qk〉 = 〈q1, Aq1 . . . , Ak−1q1〉 (4.25)

d’aquesta manera, si escollim qk+1 tal que

〈q1, . . . , qk+1〉 = 〈q1, Aq1 . . . , Ak−1q1, Akq1〉 (4.26)

el problema es, senzillament, trobar una base ortonormal del subespai de Krylov

K(A, q1, k) = 〈q1, Aq1 . . . , Ak−1q1〉 (4.27)

Sabem que si QTAQ = T es tridiagonal i QQT = Idn, aleshores

K(A, q1, n) = Q[e1|Te1|T 2e1| · · · |Tn−1e1

](4.28)

i aixı, les columnes de Q poden ser generades tridiagonalitzant A amb una matriu ortogonalque tingui q1 per primera columna. Igualant columnes a AQ = QT concloem que

Aqk = βk−1qk − 1 + αkqk + βkqk−1 (4.29)

per a tot k ∈ {1, . . . , n− 1}. Ara, com que les q’s son ortonormals, tenim que

αk = qTk Aqk

a mes, definint el residu rk = (A− αkIdn)qk − βk−1qk−1 i, si es diferent de zero,

qk+1 =rkβk

30

Page 34: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

on βk = ±‖rk‖2. Iterant aquest proces obtenim el que s’anomena el metode de Tridiagona-litzacio de Lanczos.

Aixı doncs, despres de k iteracions d’aquest metode, hem generat una matriu

Qk = (q1| · · · |qk) ∈ Rn×k

amb columnes ortonormals, una matriu tridiagonal

Tk =

α1 β1 · · · 0

β1 α2. . .

.... . .

. . .. . .

.... . .

. . . βk−10 · · · βk−1 αk

. (4.30)

i un vector rk ∈ ran(Qk)⊥ tal que

AQk = QkTk + rkeTk . (4.31)

Observem que la matriu tridiagonal

QTkAQk = Tk (4.32)

es definida positiva. La solucio del problema d’optimitzacio (4.23) a traves del metode deLanczos, es especialment simple si definim q1 = r0/β0 on r0 = b− Ax0 = −g0, i β0 = ‖r0‖2.D’altra banda, com que les columnes de Qk generen Sk = K(A, g0, k), obtenim que minimitzarφ sobre x0 + Sk es equivalent a minimitzar φ(x0 + Qky) sobre tots els vectors Y ∈ Rk.Finalment, tenint en compte que

φ(xT0Qky) =1

2(x0 +Qky)TA(x0 +Qky)− (x0 +Qky)T b (4.33)

=1

2yT (QT

kAQk)y − yT (QTk r0) + φ(x0) (4.34)

i que la primera columna de β0Qk es r0, tenim que el minimitzador yk satisfa

Tkyk = QTk r0 = β0e1

i, a mes, xk = x0+Qkyk. Aixı doncs, podem reconstruir l’algoritme que realitza el metode deLanczos, que ens dona lloc a una primera versio del metode del gradient conjugat: l’Algoritme11. Observem pero que aquest algoritme no es molt adient per a problemes grans. Doncs xkes calcula com un producte de matriu per vector de n × k i aixo requereix acces a tots elsvectors de Lanczos, que han de calcular-se previament. Aixı doncs, a continuacio miraremde modificar el metode per no haver d’utilitzar i, per tant, calcular aquests vectors. Per unabanda, com que la matriu tridiagonal Tk = QT

kAQk es definida positiva, admet la factoritzacioLDLT . Comparant els coeficients a Tk = LkDkL

Tk on

Lk =

1 0 0 0 · · · 0l1 1 0 0 · · · 00 l2 1 0 · · · 0...

. . .. . .

. . .. . . 0

0 · · · 0 lk−2 1 00 · · · 0 0 lk−1 1

, Dk = diag{d1, . . . , dk}.

31

Page 35: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

k = 0, r0 = b−Ax0, β0 = ‖r0‖2, qo = 0;mentre βk 6= 0 fer

qk+1 ← rk/βk;k ← k + 1;αk ← qTk Aqk;Tkyk ← β0e1;xk ← Qkyk;rk ← (A− αkI)qk − βk−1qk−1;βk ← ‖rk‖2;

finalx∗ = xk;

Algoritme 11: Metode del gradient conjugat, primera versio

obtenim que d1 = α1 i que per a cada i ∈ {2, . . . , k} li−1 = βi−1/di−1 i di = αi − li−1βi−1.Donada doncs, aquesta factoritzacio, podem veure que si vk ∈ Rk es una solucio de

LkDkvk = β0e1 (4.35)

aleshores LTk yk = vk. Si Ck ∈ Rn×k satisfa que

CkLTk = Qk, (4.36)

aleshoresxk = x0Qkyk = x0 + CkL

Tk yk = x0 + Ckvk. (4.37)

Aquesta manera de calcular xk no es molt practica, ja que la matriu Ck es plena i implicatots els vectors de Lanczos. No obstant, hi ha connexions simples entre Ck−1 i Ck i entrevk−1 i vk que es poden utilitzar per transformar (4.37) en una equacio mes bona. Consideremel sistema bidiagonal (4.35), per exemple, per a k = 4

d1 0 0 0d1l1 d2 0 0

0 d2l2 d3 0

0 0 d3l3 d4

ν1ν2ν3ν4

=

β000

0

.

Podem concloure que

vk =

ν1...

νk−1νk

=

(vk−1νk

)(4.38)

on

νk =

{β0/d1 si k = 1−dk−1lk−1νk−1/dk si k > 1

(4.39)

De la mateixa manera, observant que (4.36), per a k = 4, per exemple, es

(c1 c2 c3 c4

)1 l1 0 00 1 l2 00 0 1 l30 0 0 1

=(q1 q2 q3 q4

)

32

Page 36: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

d’on podem conloure queCk = (Ck−1|ck) (4.40)

on

ck =

{q1 si k = 1qk − lk−1ck−1 si k > 1

(4.41)

Per tant doncs, dels resultats (4.38) i (4.40) aplicats a (4.37) obtenim

xk = x0 + Ckvk = x0 + Ck−1vk−1 + νkck = xk−1 + νkck. (4.42)

Aplicant aquests resultats a 11 obtenim aquesta segona versio Com podem comprovar, hem

k = 0, r0 = b−Ax0, β0 = ‖r0‖2, qo = 0, c0 = 0;mentre βk 6= 0 fer

qk+1 ← rk/βk;k ← k + 1;αk ← qTk Aqk;si k = 1 aleshores

d1 = α1, ν1 = β0/d1;ck = q1;

finalsino

lk−1 = βk−1/dk−1;dk = αk − βk−1lk−1;νk = −βk−1νk−1/dk;ck = qk − lk−1ck−1;

finalxk ← xk−1 + νkck;rk ← Aqk − αkqk − βk−1qk−1;βk ← ‖rk‖2;

finalx∗ = xk;

Algoritme 12: Metode del gradient conjugat, segona versio

evitat haver de calcular les matrius Qk i Tk i, a mes, a l’algoritme nomes hi apareix duesvegades el mateix producte matriu-vector Aqk. D’aquesta manera hem alleugerit molt elscalculs.

4.4.2 Simplificacio de la primera versio

Vegem ara, si podem simplificar encara mes l’algoritme. En primer lloc, podem observar queels gradients

gk = Axk − b = ∇φ(xk)

son ortogonals entre si, cosa que explica el nom del metode. Vejem ara un parell de teoremes.

Teorema 4.3. Si x1, . . . , xk son generats per l’algoritme 12, aleshores gTi gj = 0 ∀i, j tals que1 ≤ i < j ≤ k. A mes, gk = νkrk on νk i rk son les definides per l’algoritme.

33

Page 37: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

Demostracio. La tridiagonalitzacio parcial (4.31) ens permet escriure

gk = Axk − b = A(x0 +Qkyk)− b = −r0 + (QkTk + rkeTk )yk.

D’altra banda, ja que QkTkyk = β0Qe1 = r0, obtenim que

gk = (eTk yk)rk.

I ara, com que ri es un multiple de qi+1, tenim que gi son ortogonals entre ells. Finalment,per veure que gk = νkrk, hem de veure que eTk yk = νk. De l’equacio

Tkyk = (LkDk)(LTk yk) = β0e1

sabem que LTk yk = vk on (DkLk)vk = β0e1. Per acabar la demostracio, recordem de (4.38)

que νk es l’ultim component del vector vk i que LTk es una matriu bidiagonal superior amb

1’s a la diagonal. �

El seguent teorema ens mostra que les direccions de cerca c1, . . . , ck satisfan una propietatd’ortogonalitat diferent.

Teorema 4.4. Si c1, . . . , ck son els generats per l’algoritme 12, aleshores

cTi Acj =

{0 si i 6= j,dj si i = j.

per a tot i i j que satisfan 1 ≤ i < j ≤ k.

Demostracio. Sabent que Qk = CkLTk i Tk = QT

kAQk, tenim

Tk = Lk(CTk ACk)LT

k .

No obstant, Tk = LkDkLTk . Per tant, utilitzant aquest fet i tenint en compte la unicitat de

la factoritzacio LDLT podem concloure que

Dk = CTk ACk.

La particio per columnes(c1 . . . ck

)implica que cTi Aci = (Dk)ij �

Aquest teorema doncs, ens diu que les direccions de cerca c1, . . . , ck son conjugades enrelacio a la matriu A, es a dir, respecte a la metrica que defineix A.

Aquests resultats ens permetran reescriure l’algoritme 12 de manera que evitem referenciesexplıcites als vectors de Lanczos i els coeficients de la factoritzacio LDLT . A mes, seremcapacos de reformular el criteri de parada en termes del residu del sistema lineal b−Axk encomptes del mes complicat ”vector residu de Lanczos”, Aqk − αkqk − βk−1qk−1. Consideremdoncs la formula que ens calcula els iterats de la direccio de cerca

ck = qk−1 − lk−1ck−1

de l’algoritme 12. Com que qk es un multiple de gk−1 podem veure que

34

Page 38: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

direccio de cerca k = gk−1 + escalar× direccio de cerca k − 1

Formalment,pk = gk−1 + τk−1pk−1, (4.43)

aleshores, de la seguent equacio

Apk = Agk−1 + τk−1Apk−1

i del teorema 4.4 en deduım que

τk−1 = −pk−1Agk−1pTk−1Apk−1

(4.44)

ipTkAgk−1 = pTkApk. (4.45)

D’altra banda, com que pk es un multiple de ck, l’equacio que actualitza el valor de xk,xk = xk−1 + νkck a l’algoritme 12 te la forma

xk = xk−1 + µkpk

per a algun escalar µk. Ara, aplicant A a banda i banda de l’equacio i restant b, obtenim

gk = gk−1 + µkApk.

D’aquesta igualtat, aplicant el teorema 4.3 tenim que

µk =gTk−1gk−1

gTk−1Apk=gTk−1gk−1

pTkApk.

Ara, de les equacions gk−1 = gk−2 − µk−1Apk−1 i gTk−1gk−2 = 0, deduım que

gTk−1gk−1 = −µk−1gTk−1Apk−1,gTk−2gk−2 = µk−1g

Tk−2Apk−1

= µk−1pTk−1Apk−1.

I substituint aquestes equacions a (4.44) obtenim

τk−1 =gTk−1gk−1

gTk−2gk−2.

Utilitzant doncs aquests resultats i redefinint tant rk com el residu b − Axk = −gk, podemreescriure l’algoritme 12 i obtenir l’algoritme 13. Aquesta es la versio que utilitzarem delmetode, versio que s’anomena de Hestenes-Stiefel.

35

Page 39: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

4 METODES ITERATIUS

k = 0, r0 = b−Ax0;mentre ‖rk‖2 > 0 fer

k ← k + 1;si k = 1 aleshores

pk ← r0;finalsino

τk−1 ← (rTk−1rk−1)/(rTk−2rk−2);

pk ← rk−1 + τk−1pk−1;

finalµk ← (rTk−1rk−1)/(p

TkApk);

xk ← xk−1 + µkpk;rk ← rk−1 − µkApk;

finalx∗ = xk;

Algoritme 13: Metode del gradient conjugat

4.4.3 Implementacio en paral·lel

Observant l’algoritme 13 veiem que els punts conflictius, es a dir, els passos on es concentrenla major part dels calculs es en els seguents passos:

1. Producte matriu-vector. En podem trobar 2: a l’actualitzar el valor de µk i al’actualitzar el valor de rk. A mes el producte es el mateix, Apk, i per tant, nomes calcalcular-lo una vegada.

2. Productes escalars. En podem trobar 7: 2 a l’actualitzar τk−1 i µk i un a l’actualitzarpk, xk i rk. A mes un d’aquests productes es repeteix, de manera que nomes ens caldrarealitzar-ne 6.

Aixı doncs, veient que el metode en si no te grans recurrencies ni requereix fer calculsinterns dins de matrius, seguirem una estrategia diferent a l’hora de realitzar els calculs enparal·lel.

L’estrategia que seguirem es molt senzilla, simplement paral·lelitzarem els calculs quehem enumerat, que son els que requereixen un esforc mes gran i a mes ja sabem implementaren paral·lel. D’aquesta manera crearem dues funcions que ens calculin, en primer lloc, elproducte escalar de dos vectors i, en segon lloc, el producte d’una matriu per un vector. Enaquestes funcions es on implementarem els algoritmes que ja hem vist per multiplicar matriusper vectors en paral·lel.

36

Page 40: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

5 CONCLUSIONS

5 Conclusions

Acabem aquest treball havent comprovat que la programacio en paral·lel ens pot esser degran ajuda a l’hora de realitzar tasques que requereixin un esforc computacional elevat.En particular, a l’hora de resoldre sistemes d’equacions lineals grans, hem vist que en algunsdeterminats metodes ens es molta utilitat. Pel que fa als metodes directes classics: eliminaciogaussiana, LU o Cholesky, hem vist que podem reduir significativament el temps de calculrespecte les seves versions sequencials. En els casos estudiats hem pogut veure com unordinador que disposa d’un processador amb 2 nuclis redueix el temps necessari, en algunscasos, a la meitat.

Pel que fa als metodes iteratius, pero, hem vist que n’hi ha que paral·lelitzen moltfacilment, com el Metode de Jacobi, pero que n’hi ha d’altres que no ho fan gens be, com elmetode de SOR o de Gauss-Seidel.

Per altra banda, hem vist dos metodes alternatius, aixı com una versio per blocs del metodede factoritzacio LU, que permet una distribucio mes natural dels calculs entre els threads.Hem vist els metodes de la Reduccio Cıclica i el metode del Gradient Conjugat. El primeres un metode directe que ens permet paral·lelitzar facilment, que ens serveix quan tenim unamatriu tridiagonal i, per tant, no es eficient utilitzar els metodes d’eliminacio gaussiana o LU,ni les seves implementacions en paral·lel. El segon, per altra banda, ens permet paral·lelitzarfacilment, donat que la major part dels calculs estan centrats en un producte matriu-vector,que es molt facil de paral·lelitzar utilitzant algoritmes vistos anteriorment en el treball.

En resum, podem dir que hem vist com aprofitar gran part del potencial dels ordinadorsactuals, analitzant-ne les propietats i com es poden utilitzar per dur a terme els metodesnumerics vistos al Grau de Matematiques. Hem pogut comprovar, doncs, que si podemidentificar paral·lelismes en aquests metodes, el guany en eficiencia es evident.

37

Page 41: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

A OPENMP

A OpenMP

En aquesta seccio explicarem les instruccions basiques d’OpenMP que hem utilitzar perimplementar en paral·lel els algoritmes estudiats al treball.

En el nostre cas, l’utilitzarem com una extensio de C, llenguatge de programacio estudiatdurant el Grau de Matematiques. En aquest cas doncs, l’API d’OpenMP facilita prag-mas per controlar el paral·lelisme. Aquests s’anomenen directrius i sempre comencen amb#pragma omp, seguit d’una paraula clau que identifica la directriu.

A.1 Comandes

Disposem-nos a descriure breument les directrius que hem utilitzat d’OpenMP. En primerlloc utilitzem les directrius mes generals que podem trobar a la taula 3.

parallel Indica l’inici d’un bloc paral·lel, a partir d’aquı es bifurca l’execucioentre els threads disponibles.

for Distribueix els iterats del bucle entre els threads.

sections Distribueix regions independents d’operacions entre els threads.

single Nomes un thread executa les ordres del bloc.

barrier Aquesta instruccio obliga als threads a ”esperar-se”entre si. Es a dir, elprograma continua executant-se nomes quan tots els threads han arribatal punt del codi on hi ha aquesta instruccio.

Taula 3: Instruccions utilitzades.

Per altra banda, a continuacio d’aquestes directrius, hi podem afegir les clausules detalla-des a la taula 4. Per altra banda, tambe hem utilitzat les funcions omp_get_thread_num(),

num_threads() Ens permet definir quants threads volem utilitzar a la regio pa-ral·lela.

private() Ens permet indicar quines variables han de ser privades a la regioparal·lela. Cada thread creara una copia d’aquestes variables a laseva memoria privada.

shared() Ens permet indicar quines variables seran compartides entre totsels threads.

schedule() A la direcriu for podem indicar quin esquem ha de seguir a l’-hora de repartir els iterats entre els threads. Pot ser static (Esdivideixen en tants blocs com threads), dynamic (els iterats esvan assignant als threads a mesura que aquests els requereixen),guided o runtime.

Taula 4: Clausules utilitzades.

que retorna el numero assignat al thread que esta executant aquest la regio paral·lela on estroba la instruccio i omp_get_num_threads(), que retorna el nombre de threads que estanexecutant la regio paral·lela on es troba la instruccio.

38

Page 42: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

A OPENMP

A.2 Programes utilitzats.

1 i n t prod ( double ∗∗A, double ∗∗B, double ∗∗C, i n t N) {2 i n t i , j , k ;3

4 f o r ( i = 0 ; i < N; i++) {5 f o r ( k = 0 ; k < N; k++) {6 f o r ( j = 0 ; j < N; j++) {7 C[ i ] [ j ] += A[ i ] [ k ]∗B[ k ] [ j ] ;8 }9 }

10 }11 }12

Codi 1: Producte de matrius sequencial.

Observem que simplement utilitzant la instruccio #pragma omp for schedule(static) jan’hi ha prou per paral·lelitzar el metode. Es a dir, utilitzem les instruccions #pragma per talde compilar el programa usant OpenMP. Iniciem l’entorn de programacio en paral·lel definintles variables A,B i C (on tenim les matrius desades i on volem el resultat de la multiplicacio,respectivament) com a compartides entre els diferents nuclis del processador i les variablesi, j i k com a locals, es a dir, cada nucli es fa una copia de la seva i, j i k amb les que estatreballant. En segon lloc, es reparteix cada ındex i de manera estatica entre els diferentsnuclis disponibles. A grans trets, hem repartit cada fila de la matriu entre els processadorsdisponibles, que s’encarreguen de fer els calculs per obtenir els elements de la fila en questioi escriure’ls a la matriu C.

1 i n t prodmat paral ( double ∗∗A, double ∗∗B, double ∗∗C, i n t N) {2 i n t i , j , k ;3

4 #pragma omp p a r a l l e l shared (A, B, C) p r i v a t e ( i , j , k )5 {6

7 #pragma omp f o r schedu le ( s t a t i c )8 f o r ( i = 0 ; i < n ; i++)9 f o r ( k = 0 ; k < n ; k++)

10 f o r ( j = 0 ; j < n ; j++)11 C[ i ] [ j ] += A[ i ] [ k ]∗B[ k ] [ j ] ;12 }13 re turn 0 ;14 }

Codi 2: Producte de matrius en paral·lel. Versio simple.

Si el que volem es distribuir les files per blocs entre els threads, no tenim mes remei queidentificar qui es el thread que esta executant el codi —amb la instruccioomp_get_thread_num() i modificar el bucle de manera adequada.

39

Page 43: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

A OPENMP

1 i n t prodmat paral ( double ∗∗A, double ∗∗B, double ∗∗C, i n t N) {2 i n t i , j , k , jo , np , cont ;3

4 #pragma omp p a r a l l e l shared (A, B, C) p r i v a t e ( i , j , k , jo , np , cont )5 {6 j o = omp get thread num ( ) ;7 np = omp get num threads ( ) ;8

9 i n t n = N;10

11 cont = n/np ;12

13 f o r ( i = jo ∗ cont ; i < j o ∗ cont + cont && i < n ; i++) {14 f o r ( k = 0 ; k < n ; k++) {15 f o r ( j = 0 ; j < n ; j++) {16 C[ i ] [ j ] += A[ i ] [ k ]∗B[ k ] [ j ] ;17 }18 }19 }20 }21 re turn 0 ;22 }

Codi 3: Producte de matrius en paral·lel. Utilitzant blocs de files.

1 i n t gaussJordan ( i n t n , double ∗∗A, double ∗b , double t o l ) ;2 void c a n v i f i l e s ( i n t n , i n t i , i n t j , double ∗∗A, double ∗b) ;3

4 i n t gaussJordan ( i n t n , double ∗∗A, double ∗b , double t o l ) {5 i n t k , i , j , np , me ;6 double m;7

8 // El iminac io gauss iana9

10 #pragma omp p a r a l l e l shared (A, b) p r i v a t e ( i , j , k , np , me)11 {12 me = omp get thread num ( ) ;13 np = omp get num threads ( ) ;14

15 f o r ( k = 0 ; k < n ; k++) {16 #pragma omp s i n g l e17 {18 i f ( f abs (A[ k ] [ k ] ) < t o l ) {19 j = −1;20 f o r ( i = k + 1 ; i < n ; i++) {21 i f ( f abs (A[ i ] [ k ] ) >= t o l && j == −1) {22 c a n v i f i l e s (n , k , i , A, b) ;23 j = 1 ;24 }25 }26 }27 }28 f o r ( i = k + 1 + me ; i < n ; i+=np) {29 m = A[ i ] [ k ] / A[ k ] [ k ] ;30 f o r ( j = k + 1 ; j < n ; j++) {31 A[ i ] [ j ] = A[ i ] [ j ] − m∗A[ k ] [ j ] ;32 }

40

Page 44: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

A OPENMP

33 b [ i ] = b [ i ] − m∗b [ k ] ;34 }35 #pragma omp b a r r i e r36 }37 }38 // Reso ldre39 f o r ( k = n−1; k >= 0 ; k−−) {40 f o r ( i=k+1; i<n ; i++) {41 b [ k]= b [ k ] − A[ k ] [ i ]∗b [ i ] ;42 }43 b [ k ] = b [ k ] /A[ k ] [ k ] ;44 }45

46 re turn 0 ;47 }48

49 void c a n v i f i l e s ( i n t n , i n t k , i n t p , double ∗∗A, double ∗b) {50 i n t i ;51 double c = 0 ;52

53 f o r ( i = 0 ; i < n ; i++) {54 c = A[ k ] [ i ] ;55 A[ k ] [ i ] = A[ p ] [ i ] ;56 A[ p ] [ i ] = c ;57 }58 c = b [ k ] ;59 b [ k ] = b [ p ] ;60 b [ p ] = c ;61 c = 0 ;62 }

Codi 4: Gauss Jordan.

1 i n t i , j , k , r , m=0, np , jo , i0 , j0 , s , n , ∗p , b=3;2 double ∗∗A, ∗u , ∗x , t o l = 1 . e−12, t ;3 FILE ∗a , ∗c ;4

5 p = ( i n t ∗) mal loc (n∗ s i z e o f ( i n t ) ) ;6 i f (p == NULL) {7 p r i n t f ( ”Hi ha hagut un e r r o r en l ’ a s s i g n a c i o de memoria\n” ) ;8 re turn −1;9 }

10

11 f o r ( i = 0 ; i < n ; i++) {12 p [ i ] = i ;13 }14

15 double aux ;16

17 // primer pas : b loc esquerra , LU s e q u e n c i a l18 // i n i c i de l b loc p a r a l e l19 #pragma omp p a r a l l e l shared (A, p , to l , b , n ) p r i v a t e ( i , j , k , np , jo , m, i0 , j 0

)20 {21

22 j o = omp get thread num ( ) ;23 np = omp get num threads ( ) ;

41

Page 45: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

A OPENMP

24

25 f o r (m = 0 ; b∗(m+1)<= n ; m++) {26 f o r ( k = m∗b ; k < (m+1)∗b ; k++) {27 r = k ;28 #pragma omp s i n g l e29 {30 // Pivotatge31 f o r ( i = r + 1 ; i < (m+1)∗b ; i++) {32 i f ( f abs (A[ r ] [ k ] ) < f abs (A[ i ] [ k ] ) ) {33 r = i ;34 }35 }36 i f ( r != k ) {37 aux = p [ k ] ;38 p [ k ] = p [ r ] ;39 p [ r ] = aux ;40 f o r ( i = 0 ; i < n ; i++) {41 aux = A[ r ] [ i ] ;42 A[ r ] [ i ] = A[ k ] [ i ] ;43 A[ k ] [ i ] = aux ;44 }45 }46 // f i p ivo ta tge47 /∗48 i f ( f abs (A[ k ] [ k ] )<t o l ) {49 re turn −1;50 }∗/51 }52 p r i n t f ( ”Part A: %d , m=%d , k=%d\n” , jo , m, k ) ;53 // Part A54 f o r ( i 0 = jo ∗b ; i 0 < n ; i 0 += b∗np) {55 f o r ( i = i 0 ; i < i 0 + b ; i++) {56 A[ i ] [ k ] = A[ i ] [ k ] / A[ k ] [ k ] ;57 f o r ( j = k + 1 ; j < (m + 1) ∗b ; j++) {58 A[ i ] [ j ] = A[ i ] [ j ] − A[ i ] [ k ]∗A[ k ] [ j ] ;59 }60 }61 }62 // Fi part A63 }64

65 // p r i n t f (”%d\n” , m) ;66

67 // La part B ja l a fem directament a l p ivo ta tge . Fem l a part C:r e s o l d r e e l s i s tema t r i a n g u l a r i n f e r i o r m a t r i c i a l

68 p r i n t f ( ”Part B/C: %d , m=%d\n” , jo , m) ;69 f o r ( j 0 = (m +1 +jo ) ∗b ; j 0 < n ; j += np∗b) {70 f o r ( j = j0 ; j < j 0 + b ; j++) {71 f o r ( k = m∗b ; k < (m + 1) ∗b && k < n ; k++) {72 f o r ( i = k − 1 ; i >= m∗b ; i−−) {73 A[ k ] [ j ] = A[ k ] [ j ] − A[ k ] [ i ]∗A[ i ] [ j ] ;74 }75 //Ens e s ta lv i em d i v i d i r per l a diagonal , j a que son 1 ’ s76 }77 }78 }

42

Page 46: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

A OPENMP

79 p r i n t f ( ”Part D: %d , m=%d\n” , jo , m) ;80 // Part D: ac tua l i t z em A˜81 i f ( j o == 0 | | j o == 1) {82 i 0 = b∗(m + 1) ;83 }84 i f ( j o == 2 | | j o == 3) {85 i 0 = b∗(m + 2) ;86 }87 do {88 f o r ( j 0 = b∗(m + 1 + jo %2) ; j 0 < n ; j 0 += 2∗b) {89 f o r ( i = i 0 ; i < i 0 + b ; i++) {90 f o r ( j = j0 ; j < j 0 + b ; j++) {91 f o r ( k = m∗b ; k < (m+1)∗b ; k++) {92 A[ i ] [ j ] = A[ i ] [ j ] − A[ i ] [ k ]∗A[ k ] [ j ] ;93 }94 }95 }96 }97 i 0 += 2∗b ;98 } whi le ( i 0 <= n) ;99 }

100 #pragma omp b a r r i e r101 }

Codi 5: LU a blocs paral·lel.

1 void j a c o b i ( double ∗x , double ∗X, i n t N) {2 i n t i , j , k , np , j o ;3

4 do {5 #pragma omp p a r a l l e l shared (X, x ) p r i v a t e ( i , j , jo , np )6 {7 j o = omp get thread num ( ) ;8 np = omp get num threads ( ) ;9

10 i f ( j o == 0) {11 X[ 0 ] = ( ( double ) 1/2 . 1 ) ∗( x [ 1 ] + 1 . 1 ) ;12 }13 b= N/np ;14 f o r ( i = jo ∗b + 1 ; i < j o ∗b + 1 + b && i < N−1; i ++) {15 X[ i ] = ( ( double ) 1/2 . 1 ) ∗( x [ i −1] + x [ i +1] + 0 . 1 ) ;16 }17 i f ( j o == 0) {18 X[N−1] = ( ( double ) 1/2 . 1 ) ∗( x [N−2] + 1 . 1 ) ;19 }20 }21

22 e = normainf (X, x , N) ;23 #pragma omp p a r a l l e l shared (X, x ) p r i v a t e ( i , j , jo , np )24 {25 j o = omp get thread num ( ) ;26 np = omp get num threads ( ) ;27

28 b= N/np ;29

30 f o r ( i = jo ∗b ; i < ( j o +1)∗b && i < N; i++) {31 x [ i ] = X[ i ] ;

43

Page 47: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

A OPENMP

32 }33 }34 } whi le ( e > 1e−12) ;35 }36 double normainf ( double ∗A, double ∗B, i n t n) {37 i n t i , b , jo , np ;38 double max = 0 ;39 #pragma omp p a r a l l e l shared (A, B, n , max) p r i v a t e ( i , jo , np , b)40 {41 j o = omp get thread num ( ) ;42 np = omp get num threads ( ) ;43

44 b = n/np ;45

46 double maxl = 0 ;47

48 f o r ( i = jo ∗b ; i < ( j o +1)∗b && i < n ; i++) {49 i f ( f abs (A[ i ] − B[ i ] ) > maxl ) {50 maxl = fabs (A[ i ] − B[ i ] ) ;51 }52 }53 #pragma omp b a r r i e r54 f o r ( i = 0 ; i < np ; i++) {55 i f ( j o == i ) {56 i f ( maxl > max) {57 max = maxl ;58 }59 }60 #pragma omp b a r r i e r61 }62 }63 re turn 3∗max ;64 }

Codi 6: Jacobi en paral·lel.

44

Page 48: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

CODIS

Codis

1 Producte de matrius sequencial. . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2 Producte de matrius en paral·lel. Versio simple. . . . . . . . . . . . . . . . . . 39

3 Producte de matrius en paral·lel. Utilitzant blocs de files. . . . . . . . . . . . 40

4 Gauss Jordan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

5 LU a blocs paral·lel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

6 Jacobi en paral·lel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

45

Page 49: INTRODUCCIO A L’ ALGEBRA LINEAL NUMERICA EN PARAL LELdiposit.ub.edu/dspace/bitstream/2445/149578/1/149578.pdf · 2020. 7. 7. · m obils, tauletes... ja disposa, almenys, de processadors

BIBLIOGRAFIA

Bibliografia

[1] B. Chapman, G. Jost i R. Van Der Pas. Using OpenMP. Scientific and EngineeringComputation. The MIT Press, 2008. isbn: 9780262533027.

[2] G. H. Golub i C. F. Van Loan. Matrix Computations. 4a ed. The Johns Hopkins Uni-versity Press, 2013. isbn: 978-1-4214-0794-4.

[3] Y. Saad. Iterative Methods for Sparse Linear Systems. 2a ed. Society for Industrial iApplied Mathematics, 2003.

[4] H. H. Wang. ?A Parallel Method for Tridiagonal Equations? A: ACM Transactions onMathematical Software 7.2 (juny de 1981), pag. 170 - 183.

46


Recommended