30.07.2015 Views

Actas JP2011 - Universidad de La Laguna

Actas JP2011 - Universidad de La Laguna

Actas JP2011 - Universidad de La Laguna

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Actas</strong> XXII Jornadas <strong>de</strong> Paralelismo (<strong>JP2011</strong>) , <strong>La</strong> <strong>La</strong>guna, Tenerife, 7-9 septiembre 2011α i =→ ver algoritmo 1x (i+1) = x (i) + α i p (i)r (i+1) = r (i) − Φ(x (i) ) + Φ(x (i+1) ) − α i Ap (i)Resolver Ms (i+1) = r (i+1)Test <strong>de</strong> convergenciaβ i+1 = − 〈s(i+1) ,r (i+1) 〉〈s (i) ,r (i) 〉p (i+1) = r (i+1) − β i+1 p (i)Dado que el sistema auxiliar Ms = r ha <strong>de</strong> resolverseen cada iteración <strong>de</strong>l algoritmo, está solución ha<strong>de</strong> po<strong>de</strong>rse obtener rápidamente. A<strong>de</strong>más, para que elprecondicionador sea efectivo es necesario que M seauna buena aproximación <strong>de</strong> A. El precondicionamientomediante series truncadas [2] es una técnica común <strong>de</strong>precondicionamiento para resolver sistemas lineales, queconsiste en consi<strong>de</strong>rar una partición <strong>de</strong> la matriz A talque,A = P − Q (3)y realizar m iteraciones <strong>de</strong>l proceso iterativo <strong>de</strong>finidopor esta partición, buscando la solución <strong>de</strong> As = r, ytomando s (0) = 0. Es bien conocido que la solución <strong>de</strong>lsistema auxiliar Ms = r es s = (I + R + R 2 + . . . +R m−1 )P −1 r, don<strong>de</strong> R = P −1 Q y la matriz <strong>de</strong> precondicionamientoes M m = P (I + R + R 2 + . . . + R m−1 ) −1(ver [2]).Si a<strong>de</strong>más suponemos que A está dividida en p × pp∑bloques, con bloques diagonales <strong>de</strong> or<strong>de</strong>n n j , n j =j=1n, tal que el sistema (1) pue<strong>de</strong> escribirse como:⎡⎤ ⎡ ⎤ ⎡ ⎤A 11 A 12 · · · A 1p x 1 Φ 1 (x)A 21 A 22 · · · A 2px 2Φ ⎢⎥ ⎢⎥⎣. .. ⎦ ⎣. ⎦ = 2 (x)⎢⎥⎣. ⎦ , (4)A p1 A p2 · · · A pp x p Φ p(x)don<strong>de</strong> x y Φ(x) están particionados en función <strong>de</strong>ltamaño <strong>de</strong> los bloques <strong>de</strong> A. Si consi<strong>de</strong>ramos la partición(3) estando P compuesta por los bloques diagonales <strong>de</strong> Aen la ecuación (4), es <strong>de</strong>cirP = diag(A 11 , . . . , A pp ), (5)realizar m iteraciones <strong>de</strong>l proceso iterativo <strong>de</strong>finido por lapartición (3) para obtener una aproximación <strong>de</strong> As = r,correspon<strong>de</strong> a realizar m iteraciones <strong>de</strong>l método <strong>de</strong> Jacobipor bloques. Por lo tanto, en cada iteración l, l =1, 2, . . . , <strong>de</strong>l método <strong>de</strong> Jacobi por bloques, ha <strong>de</strong> resolversep sistemas lineales in<strong>de</strong>pendientes <strong>de</strong>l tipo,A jj s (l)j = (Qs (l−1) + r) j , 1 ≤ j ≤ p. (6)Por tanto, los sistemas lineales (6) pue<strong>de</strong>n ser resueltospor procesos distintos. Sin embargo, cuando el tamaño<strong>de</strong> los bloques diagonales A jj , 1 ≤ j ≤ p, es gran<strong>de</strong>, esaconsejable utilizar un proceso iterativo para obtener unaaproximación <strong>de</strong> las soluciones, utilizando por tanto elmétodo en dos etapas; ver por ejemplo [3]. Formalmente,consi<strong>de</strong>ramos las particionesA jj = B j − C j , 1 ≤ j ≤ p, (7)y en la l-ésima iteración se realizan, para cada j, 1 ≤j ≤ p, q(j) iteraciones <strong>de</strong>l proceso iterativo <strong>de</strong>finido porlas particiones (7) para obtener una aproximación <strong>de</strong> lasolución <strong>de</strong> (6). Por tanto, para resolver el sistema auxiliarMs = r <strong>de</strong>l algoritmo 2, se realizan m pasos <strong>de</strong>la iteración s (l) = T s (l−1) + W −1 r, l = 1, 2, . . . , m,tomando s (0) = 0, don<strong>de</strong>T = H + (I − H)P −1 Q, W = P (I − H) −1 , (8)estando P <strong>de</strong>finido en (5) y H =diag((B1 −1 C 1) q(1) , . . . , (Bp−1 C p ) q(p) ); ver por ejemplo[4]. El siguiente algoritmo muestra el método utilizadopara aproximar el sistema lineal As = r (ver [3]).Algoritmo 3: (Método paralelo por bloques en dosetapas)Dado ( un vector inicial ) s (0) =T(s (0)1 )T , (s (0)2 )T , . . . , (s (0)p ) T , y una secuencia<strong>de</strong> número <strong>de</strong> iteraciones internas q(j), 1 ≤ j ≤ pPara l = 1, 2, . . ., hasta convergenciaEn el proceso j, j = 1, 2, . . . , py (0)j = s (l)jPara k = 1 hasta q(j)B j y (k)j = C j y (k−1)j + (Qs (l−1) + r) j() Ts (l) = (y (q(1))1 ) T , (y (q(2))2 ) T , . . . , (y p(q(p)) ) THay que remarcar, que el vector obtenido tras m iteraciones<strong>de</strong>l algoritmo 3, siendo s (0) = 0, viene dado pors (m) = (I + T + T 2 + . . . + T m−1 )W −1 r don<strong>de</strong> T yW están <strong>de</strong>finidos en (8). Por tanto, el precondicionadorobtenido mediante el método por bloques en dos etapases M m = W (I +T +T 2 +. . .+T m−1 ) −1 . Para obtenerlas particiones internas, en el método NLPCG, se ha hechouso <strong>de</strong> factorizaciones incompletas LU, en [5] pue<strong>de</strong>verse una <strong>de</strong>scripción <strong>de</strong>tallada <strong>de</strong>l algoritmo NLPCG.II. PROGRAMACIÓN PARALELA CON CUDA<strong>La</strong> arquitectura <strong>de</strong> una GPU (Graphics ProcessingUnit), está formada por un conjunto <strong>de</strong> multiprocesadores<strong>de</strong>nominados “streaming multiprocessors (SM)”, cadauno <strong>de</strong> los cuales está compuesto por un conjunto <strong>de</strong>procesadores <strong>de</strong>nominados “streaming processors (SP)”.CUDA es el mo<strong>de</strong>lo <strong>de</strong> programación utilizado para explotarel paralelismo <strong>de</strong> las GPUs, el cual es un mo<strong>de</strong>loheterogéneo que hace uso tanto <strong>de</strong> la CPU como<strong>de</strong> la GPU. En el mo<strong>de</strong>lo <strong>de</strong> programación <strong>de</strong> CUDA(ver por ejemplo [6] y [7]), una aplicación consiste enun programa secuencial principal (o “host”) ejecutadoen la CPU, el cual pue<strong>de</strong> lanzar programas, conocidoscomo “kernels”, en el dispositivo paralelo, es <strong>de</strong>cir enla GPU. Pese a que la CPU sobre la que se ejecuta elprograma host pue<strong>de</strong> ser un multiprocesador <strong>de</strong> memoriacompartida, con capacidad para ejecutar programas paralelos,<strong>de</strong>sarrollados por ejemplo con OpenMP, sólo unprocesador (o “core”) pue<strong>de</strong> lanzar un kernel, es <strong>de</strong>cir lasllamadas a los kernels <strong>de</strong>ben serializarse. <strong>La</strong> ejecución<strong>de</strong> los kernels son <strong>de</strong> tipo SPMD (Single Program MultipleData), que, a<strong>de</strong>más, pue<strong>de</strong> utilizar un gran número<strong>de</strong> “threads” o hilos. Cada hilo <strong>de</strong> un kernel ejecuta elmismo programa secuencial, siendo el programador elque <strong>de</strong>be organizar los hilos <strong>de</strong> un kernel en bloques,formando estos bloques lo que se conoce como “grid”.Los hilos <strong>de</strong> un bloque pue<strong>de</strong>n cooperar entre ellos, sin-<strong>JP2011</strong>-348

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!