48
1 Programación y Computación paralela (7) Resolviendo Sist.Ec.Lineales provenientes de Ec.Dif.Parc. Glen D. Rodríguez R. Basado en material de J. Demmel

Paralela7

Embed Size (px)

DESCRIPTION

Clase 7

Citation preview

Page 1: Paralela7

1

Programación y Computación paralela (7)

Resolviendo Sist.Ec.Linealesprovenientes de Ec.Dif.Parc.

Glen D. Rodríguez R.

Basado en material de J. Demmel

Page 2: Paralela7

02/02/2006 CS267 Lecture 6

Temario

• Revisar Ec. Poisson

• Resumen de métodos para resolver Ec. Poisson

• Método de Jacobi

• Método SOR Rojas y Negras

• Gradiente conjugada

• FFT (transformada rápida de Fourier)

Reducen a mat.mul de

matrices dispersas.

Pre-requisitos para

entender Multigrid

Page 3: Paralela7

3

Repaso de “Fuentes de paralelismo”• Sistemas de eventos discretos:

• Ejs: “Game of Life,” simulación de circuitos lógicos. • Sistemas de partículas:

• Ejs: bolas de billar, simulación de dispositivos

semiconductores, galaxias.• Variables agregadas dependientes de parámetros continuos:

• EDOs, ejs: simulación de circuitos (Spice), mecánica estructral, cinética química.

• Variables contínuas dependientes de parámetros continuos:

• EDPs, ejs: calor, elasticidad, electrostática.

• Un fenómeno dado puede ser modelado en múltiples niveles.• Muchas simulaciones combinan más de una técnica.

Page 4: Paralela7

4

Repaso: Resolviendo EDPs

°Problemas hiperbólicos (ondas):

• Onda sonora (posición, time)

• Usan iteración en el tiempo en forma explícita

• Solución en cada punto depende de los vecinos en ∆t anterior

• Problemas elípticos (estado estable):

• Potencial electrostático (posición)

• Todo valor depende de todos lo demás valores

• Localidad es más difícil de hallar que en los problemas hiperbólicos

• Problemas parabólicos (dependientes del tiempo):

• Temperatura (posición, tiempo)

• Involucra una solución elíptica cada ∆t

• Nos enfocaremos en los elípticos

• Ejemplo canónico es la ec. Poisson

∂∂∂∂2u/∂∂∂∂x2 + ∂∂∂∂2u/∂∂∂∂y2 + ∂∂∂∂2u/∂∂∂∂z2 = f(x,y,z)

Page 5: Paralela7

5

Ec. Poisson aparece en muchos lados

• Potencial electrostático o gravitacional: Potencial (posición)

• Flujo de calor: Temperatura (posición, tiempo)

• Difusión: Concentración (posición, tiempo)

• Flujo de fluidos: Velocidad, Presión ,Densidad (posición,

tiempo)

• Elasticidad: Tensión, estiramiento (posición, tiempo)

• Variaciones de Poisson tienen coeficientes variables

3D: ∂∂∂∂2u/∂∂∂∂x2 + ∂∂∂∂2u/∂∂∂∂y2 + ∂∂∂∂2u/∂∂∂∂z2 = f(x,y,z)

2D: ∂∂∂∂2u/∂∂∂∂x2 + ∂∂∂∂2u/∂∂∂∂y2 = f(x,y)

1D: d2u/dx2 = f(x)

f representa las fuentes; además se necesita condiciones de frontera

Page 6: Paralela7

6

Relación de ec. Poisson con la Gravedad, Electrostática

• Fuerza en la partícula en (x,y,z) debido a una partícula

en (0,0,0)

• 3D: -(x,y,z)/r3, where r = √(x2 +y2 +z2 )

• 2D: -(x,y)/r2, where r = √(x2 + y2 )

• Fuerza es gradiente del potencial V (con signo opuesto)

• 3D: V = -1/r, ∇V = (∂V/∂x, ∂V/∂y, ∂V/∂z)

• 2D: V = log r, ∇V = (∂V/∂x, ∂V/∂y)

• V satisface la ec. de Poisson (tarea)

Page 7: Paralela7

7

Ec. Poisson en 1D: ∂∂∂∂2u/∂∂∂∂x2 = f(x)

2 -1

-1 2 -1

-1 2 -1

-1 2 -1

-1 2

T =2-1 -1

Grafo y “estencil”

Discretizard2u/dx2 = f(x)

en la malla regular ui = u(i*h)

Para conseguir[ u i+1 – 2*u i + u i-1 ] / h2 = f(x)

Se resuelve como Tu = -h2 * f

Para array desconocido u donde

Page 8: Paralela7

8

Ec. Poisson en 2D

• Similar al caso 1D, pero la matriz T se vuelve:

• 3D es análogo

4 -1 -1

-1 4 -1 -1

-1 4 -1

-1 4 -1 -1

-1 -1 4 -1 -1

-1 -1 4 -1

-1 4 -1

-1 -1 4 -1

-1 -1 4

T =

4

-1

-1

-1

-1

Grafo y “estencil”

6-1 -1

-1

-1-1

-1

Page 9: Paralela7

9

Algoritmos para Poisson 2D (3D) (N = n2 (n3) vars)

Algoritmo Serial PRAM Memoria #Procs

• LU denso N3 N N2 N2

• LU bandas N2 (N7/3) N N3/2 (N5/3) N (N4/3)

• Jacobi N2 (N5/3) N (N2/3) N N

• Inv.Explicit N2 log N N2 N2

• Gradiente Conj. N3/2 (N4/3) N1/2(1/3) *log N N N

• SOR r/n N3/2 (N4/3) N1/2 (N1/3) N N

• LU dispersa N3/2 (N2) N1/2 N*log N (N4/3) N

• FFT N*log N log N N N

• Multigrid N log2 N N N

• MINIMO N log N N

PRAM es un modelo de paralelismo ideal con costo de comunicación

despreciable

Referencia: James Demmel, Applied Numerical Linear Algebra, SIAM, 1997.

Page 10: Paralela7

10

Resumen de Algoritmos en malla n x n grid (n x n x n) (1)

•El orden de presentación es así (aprox.):• Del más lento al más rápido en máquinas secuenciales.• Del más general (trabaja en cualquier matriz) al más especializado

(trabaj en matrices “parecidas” a T).•LU denso: GE; trabaja en cualquier matriz N-by-N.•LU en bandas: aprovecha el hecho que T es ≠ de cero solo en las N1/2

(N2/3) diagonales más cercanas a la diagonal principal.•Jacobi: básicamente hace mult. matriz vector por T en el loop interno de un algoritmo iterativo.

• Inverso explícito: Asume que queremos resolver muchos problemas con la misma T, así que se precalcula y guarda inv(T) “gratis”, y se multiplica por ella (pero todavía caro!).

•Gradiente conjugada: usa mult. matriz vector, como Jacobi, pero aprovecha propiedades matemáticas de T que Jacobi no aprovecha.

•SOR (successive over-relaxation) rojo/negro: Variación de Jacobi que explota otras propiedades de T. Usado en multigrid.

•LU disperso: GE explotando la estructura particular de ceros de T.•FFT (fast Fourier transform): Trabaja sólo en matrices muy similares a T.•Multigrid: trabaja en matrices similares a T, que vienen de ec. elípticas.•MINIMO: estadística del mejor Serial (tiempo para tener la respuesta en output); del mejor paralelo (tiempo para combinar los N outputs).

Page 11: Paralela7

11

Resumen de Algoritmos en malla n x n grid (n x n x n) (2)

•Dimensión = N = n2 en 2D (=n3 en 3D)

•Ancho de banda = BW = n en 2D (=n2 en 3D)

•Número de Condición= k = n2 en 2D ó 3D

•#its = número de iteraciones

•SpMV = Sparse-matrix-vector-multiply

•LU densa:

• costo = N3 (serial) ó N (paralelo, con N2 procs)

•LU en bandas:

• costo = N * BW2 (serial) ó N (paralelo con BW2 procs)

•Jacobi:

• costo = costo(SpMV) * #its, #its = k.

•Gradiente conjugada:

• costo = (costo(SpMV) + costo(prod vectorial))* #its, #its = sqrt(k)

•SOR roja/negra:

• costo = costo(SpMV) * #its, #its = sqrt(k)

•Algoritmos Iterativos necesitan diversos supuestos para análisis de convergencia

Page 12: Paralela7

12

Comentarios en mallas en la práctica

• Mallas regulares 1D, 2D, 3D• Importantes como bloques básicos para fromar mallas más

complicadas

• Se discutirán primero

• Mallas en la prácticas son irregular con frecuencia• Mallas compuestas, consistentes de vrias mallas regulares

“torcidas” unidas en los bordes

• Mallas no estructuradas, Con puntos de malla y conecconesarbitrarias

• Mallas adaptativas, cambian en resolución (tamaño, finura) a lo largo del proceso de solución para computar más donde se necesita más precisión

Page 13: Paralela7

13

Malla compuesta en una estructura mecánica

Page 14: Paralela7

14

Malla no estructurada: Perfil de ala 2D (NASA)

Page 15: Paralela7

15

Refinamiento de malla adaptativa (AMR)

°Malla adaptativa alrededor de una explosión°Fuente: John Bell y Phil Colella en LBL

Page 16: Paralela7

16

Malla irregular : tubo que se estrecha (multigrid)

Page 17: Paralela7

17

Método de Jacobi

• Para derivar este método, escribir Poisson como:

u(i,j) = (u(i-1,j) + u(i+1,j) + u(i,j-1) + u(i,j+1) + b(i,j))/4

• Hacer u(i,j,m) la aproximación de u(i,j) después de m

pasos

u(i,j,m+1) = (u(i-1,j,m) + u(i+1,j,m) + u(i,j-1,m) +

u(i,j+1,m) + b(i,j)) / 4

• O sea, u(i,j,m+1) es un promedio ponderado de vecinos

• Motivación: u(i,j,m+1) escogido para satisfacer

exactamente la ecuación en el punto (i,j)

• Pasos para converger proporcional al tamaño del problema, N=n2

• Ver Lección 24 de www.cs.berkeley.edu/~demmel/cs267_Spr99

• Por lo tanto, complejidad serial es de O(N2)

Page 18: Paralela7

18

Convergencia de los métodos de vecinos

• Jacobi involucra la computación de los vecinos más

próximos en una malla nxn (N = n2)• Así que toma O(n) = O(sqrt(N)) iteraciones para que la

información se propague

• Ej., considerar un vector b = 0, excepto en el centro =1

• La solución exacta es más o menos así:

Aún en el mejor caso, cualquier computación de vecinos más próximos toma n/2 pasos para propagarse en una malla nxn

Page 19: Paralela7

19

Convergencia de los métodos de vecinos

0

20

0

20

0

0.5

1

Right Hand Side

0

20

0

20

0

0.5

1

True Solution

0

20

0

20

0

0.5

1

5 steps of Jacobi

0

20

0

20

0

0.5

1

Best 5 step solution

Page 20: Paralela7

20

Paralelizando el método de Jacobi

• Se reduce a una mult. matriz dispersa T (o casi) x vector

U(m+1) = (T/4 - I) * U(m) + B/4

• Cada valor de U(m+1) puede ser calculado por separado• mantener 2 copias para las iteraciones m y m+1

• Requiere que los valores en los límites se comuniquen• Si cada procesador posee n2/p elementos para update

• Cantidad de data comunicada, n/p por vecino, es relativamente poco si n>>p

Page 21: Paralela7

21

Optimización de Localidad en Jacobi

• Update de vecinos más próximos en Jacobi tiene:• Buena localidad espacial (en mallas regulares): fila / columna

• Mala localidad temporal: pocos flops por punto

• Ej: en mallas 2D: 4 sumas y 1 mult. vs. 5 lecturas y 1 escritura

• Para proc. Paralelo o secuencial, se puede reducir ops.

memoria por un aumento de cómputos• Idea: para cada submalla, hacer varias iteraciones de Jacobi

• Tamaño de submalla se achica con cada iteración, así que comenzar con la mayor

• Usado en uniprocesadores:

• Rescheduling para Localidad, Michelle Mills Strout:

– www-unix.mcs.anl.gov/~mstrout

• Algoritmos multigrid eficientes en uso de cache, Sid Chatterjee

• Y comput.paralelas, incluyendo “ajustes” de mallas

• Ian Foster et al, SC2001

Page 22: Paralela7

22

Nodos fantasmas redundantes en Jacobi

• Resumen de optimización de jerarquía de memoria

• Puede ser usado en mallas no estructuradas

• Tamaño de región fantasma (y cómputo redundante) depende en velocidad de red o memoria vs. computación

Para computar

verde

Copiar amarillo

Computar azul

Page 23: Paralela7

23

Sobre-Relajación Sucesiva (SOR)

• Similar a Jacobi: u(i,j,m+1) se calcula como una

combinación lineal de los vecinos

• Coefic. numéricos y orden de updates son diferentes

• Basado en 2 mejoras respecto a Jacobi• Usa los “valores más recientes” disponible para u, por que estos

valores posiblemente son más precisos � Gauss Seidel

• Actualizar el valor de u(m+1) “más agresivamente” a cada paso

• Primero, note que cuando evaluamos secuencialmente

• u(i,j,m+1) = (u(i-1,j,m) + u(i+1,j,m) …

algunos de los valores para m+1 ya están disponibles• u(i,j,m+1) = (u(i-1,j,latest) + u(i+1,j,latest) …

donde “latest” es ya sea m ó m+1

Page 24: Paralela7

24

Gauss-Seidel

• Actualizar de izq.-a-der. en orden por filas, es el algoritmo

de Gauss-Seidelfor i = 1 to n

for j = 1 to n

u(i,j,m+1) = (u(i-1,j,m+1) + u(i+1,j,m) + u(i,j-1,m+1) + u(i,j+1,m)

+ b(i,j)) / 4

• No puede paralelizarse, debido a las dependencias, así que mejor se usa el orden “rojo-negro”

forall puntos negros u(i,j)

u(i,j,m+1) = (u(i-1,j,m) + …

forall puntos rojos u(i,j)

u(i,j,m+1) = (u(i-1,j,m+1) + …

°Para un gráfico general, usar coloreo de grafos °Se puede usar conjuntos independ. máximos repetidos para colorear° Grafo(T) es bipartito => 2 colores (rojo y negro)°Nodos para cada color pueden ser actualizados simultáneamente°Sigue siendo multip. vector matriz dispersa, usando submatrices

Page 25: Paralela7

25

Sobre-Relajación Sucesiva (SOR)

• Este Gauss-Seidel rojo-negro converge dos veces más rápido que Jacobi, pero hay el doble de pasos paralelos, así que es lo mismo en la práctica.

• Para motivar la siguiente mejora, que el paso básico sea:

u(i,j,m+1) = u(i,j,m) + corrección(i,j,m)

• Si la “corrección” es una buena dirección a donde moverse, entonces uno debería moverse aún más lejos en esa diección por un factor w>1

u(i,j,m+1) = u(i,j,m) + w * correction(i,j,m)

• Se le llama “successive overrelaxation” (SOR)

• Paraleliza como Jacobi (Multip. vector matriz dispersa…)

• Se puede probar que w = 2/(1+sin(π/(n+1)) ) da mejor convergencia

• Número de pasos para converger = complejidad paralela = O(n), en vez

del O(n2) de Jacobi

• Complejidad Serial O(n3) = O(N3/2), en vez del O(n4) = O(N2) de Jacobi

Page 26: Paralela7

26

Gradiente Conjugada (CG) para resolver A*x = b

• Este método puede usarse cuando la matriz A es

• simétrica, o sea, A = AT

• positiva definida, o sea cualquiera de estas 3 definiciones equivalentes:

• Todos los eigenvalores son positivos

• xT * A * x > 0 para todo vector x diferente de 0

• Tiene una factorización Cholesky A = L*LT

• El algoritmo mantiene 3 vectores

• x = la solución aproximada, mejorada tras cada iteración

• r = el residual, r = A*x - b

• p = dirección de búsqueda, o la gradiente conjugada

• Costo de una iteración

• Mult. vector x matriz dispersa A (costo más importante)

• 3 productos vectoriales, 3 saxpy (escala*vector + vector)

• Converge en O(n) = O(N1/2) pasos, como SOR

• Complejidad serial = O(N3/2)

• Complejidad paralela = O(N1/2 log N), factor log N del producto vectorial

Page 27: Paralela7

27

Gradiente Conjugada (CG) para resolver A*x = b

• Aproximación inicial x (“initial guess”,adivinada)

• r = b – A*x, j=1

• Repetir• rho = rT*r … producto vectorial

• If j=1, p = r, else beta = rho/viejo_rho, p = r + beta*p, endif …saxpy

• q = A*p … MatMul dispersa

• alpha = rho / pT * q … producto vectorial

• x = x + alpha * p … saxpy

• r = r – alpha * q … saxpy

• viejo_rho = rho; j=j+1

• Hasta que rho sea lo suficientemente pequeño

Page 28: Paralela7

28

Cómo escoger el algoitmo iterativo para Ax=b

• Usar sólo mult.matriz-vector, prod.vect., saxpy, …

• Ver www.netlib.org/templates

Simétrica?

Definida?AT disponible?

Eigenvalores

conocidos?

trata CG trata CG o

Chebyshev

trata Minres

o CGtrata QMR

Almacenam.

es “caro”?

trata CGS o

Bi-CGSTABtrata GMRES

N S

N

N

N

N

S

S

S

S

Page 29: Paralela7

29

Sumario de Jacobi, SOR y CG

• Todos (Jacobi, SOR, y CG) hacen mult. Matriz dispersa x

vector

• Para Poisson, esto significa comunicación entre vecinos más próximos en una malla n-by-n grid

• Toma n = N1/2 pasos para que la información viaje a lo largo de una malla n-por-n

• Como la solución en un lado de la malla depende de la

data en el otro lado de la malla, se necesitan métodos que muevan la información más rápidos

• FFT

• Multigrid

Page 30: Paralela7

30

Resolviendo la Ec.Poisson con FFT

• Motivación: expresar la solución continua como serie de Fourier

• u(x,y) = Σi Σk uik sen(π ix) sen(π ky)

• uik es el coeficiente de Fourier de u(x,y)

• La ecuación de Poisson ∂2u/∂x2 + ∂2u/∂y2 = b se convierte en:

Σi Σk (-πi2 - πk2) uik sen(π ix) sen(π ky)

= Σi Σk bik sen(π ix) sen(π ky)

° donde bik son los coefic. de Fourier de b(x,y)

• Unicidad: como la serie de Fourier es única, uik = bik / (-πi2 - πk2)

• Algoritmo continuo (Algoritmo discreto)

° Computa coefic.Fourier bik del lado derecho de la ecuación

° Aplicar FFT 2D a los valores b(i,k) en la malla

° Computa coefic.Fourier uik de la solución

° Divida cada transformada b(i,k) entre la función(i,k)

° Computa la solución u(x,y) usando los coef.Fourier

° Aplicar la FFT inversa 2D a los valores de b(i,k) divididos

Page 31: Paralela7

31

FFT Serial

• Hacer i=sqrt(-1) y que los índices de matrices y

vectores empiezen en 0.

• La Transformada discreta de Fourier de un vector v de m elementos es:

F*v

Donde F es la matriz m*m definida como:

F[j,k] = ϖ (j*k)

Donde ϖ es:

ϖ = e (2πi/m) = cos(2π/m) + i*sen(2π/m)

ϖ es un número complejo cuyo m-esima potencia ϖm =1 y por ello es una raiz m-esima de la unidad

• Ej., for m = 4:

ϖ = i, ϖ2 = -1, ϖ3 = -i, ϖ4 = 1,

Page 32: Paralela7

32

Usando la FFT 1D para filtrar

• Señal = sen(7t) + .5 sen(5t) en 128 puntos

• Ruido = número aleatorio no mayor que 0.75

• Filtrar cereando los componentes FFT < 0.25

Page 33: Paralela7

33

Usando la FFT 2D para compresión de imágenes

• Imagen = matriz 200x320 pixels (valores)

• Comprimido manteniendo el 2.5% más significativo de

los componente del FFT, descarta el resto.

• Similar idea usada en formato jpeg (transf. del coseno)

Page 34: Paralela7

34

Transformadas relacionadas

• La mayor parte de aplicaciones necesitan multiplicar por

F y por la inversa de F.

• Multiplicando por F y inversa(F) es esencialmente lo

mismo (inversa(F) es la conjugada compleja de F dividida por n)

• Para resolver la ec. Poisson y varias otras, usaremos

las variaciones de la FFT• La transformada del seno – parte imaginaria de F

• La transformada del coseno – parte real de F

• Algoritmos similares, así que nos enfocaremos en la

“forward FFT”

Page 35: Paralela7

35

Algoritmo serial para la FFT

• Computar la FFT de un vector v con m elementos, F*v

(F*v)[j] = Σ F(j,k) * v(k)

= Σ ϖ (j*k) * v(k)

= Σ (ϖ j)k * v(k)

= V(ϖ j)

• Donde V es el polinomio

V(x) = Σ xk * v(k)

m-1

k = 0

m-1

k = 0m-1

k = 0

m-1

k = 0

Page 36: Paralela7

36

FFT usando “divide y vencerás”

• V puede ser evaluado usando el “divide y vencerás”

V(x) = Σ (x)k * v(k)

= v[0] + x2*v[2] + x4*v[4] + …

+ x*(v[1] + x2*v[3] + x4*v[5] + … )

= Vpar(x2) + x*Vimpar(x

2)

• V tiene grado m-1, así que Vpar y Vimpar son polinomios

de grado m/2-1

• Los evaluamos en los puntos (ϖ j)2 para 0<=j<=m-1

• Pero esto relamente es sólo m/2 puntos diferentes, pues

(ϖ (j+m/2) )2 = (ϖ j *ϖ m/2) )2 = ϖ 2j *ϖ m = (ϖ j)2

• Así que FFT en m puntos se reduce a 2 FFTs en m/2

puntos• Divide y vencerás!

m-1

k = 0

Page 37: Paralela7

37

FFT usando “divide y vencerás”

FFT(v, ϖ, m)

if m = 1 retornar v[0]

else

veven = FFT(v[0:2:m-2], ϖ 2, m/2)

vodd = FFT(v[1:2:m-1], ϖ 2, m/2)

ϖ-vec = [ϖ0, ϖ1, … ϖ (m/2-1) ]

retornar [vpar + (ϖ-vec .* vimpar),

vpar - (ϖ-vec .* vimpar) ]• La operación .* es multiplicación componente a componente, no es

prod. vectorial.

• El […,…] es la construcción de vector de m elementos de 2 vecores con m/2 elementos

El algoritmo es de complejidad O(m log m).

precomputed

Page 38: Paralela7

38

Un Algoritmo iterativo

• El árbol de llamadas de algoritmo divide y vencerás FFT

es un árbol binario completo de log m niveles

• Los algoritmos prácticos son iterativos, van a lo largo de

cada nivel del árbol comenzando de abajo

• El algoritmo sobre escribe v[i] con (F*v)[bitreverse(i)]

FFT(0,1,2,3,…,15) = FFT(xxxx)

FFT(1,3,…,15) = FFT(xxx1)FFT(0,2,…,14) = FFT(xxx0)

FFT(xx10) FFT(xx01) FFT(xx11)FFT(xx00)

FFT(x100) FFT(x010) FFT(x110) FFT(x001) FFT(x101) FFT(x011) FFT(x111)FFT(x000)

FFT(0) FFT(8) FFT(4) FFT(12) FFT(2) FFT(10) FFT(6) FFT(14) FFT(1) FFT(9) FFT(5) FFT(13) FFT(3) FFT(11) FFT(7) FFT(15)

par impar

Page 39: Paralela7

39

FFT 1D paralelo

• Dependencias de data en

el FFT 1D• Patrón de “mariposa”

• Un algoritmo PRAM toma

un tiempo O(log m)• Cada paso a la derecha

es paralelo

• Hay log m pasos

• Y qué pasa con el costo

de comunicación?

• Ver paper LogP

• Culler, Karp, Patterson, “LogP: Towards a

Realistic Model of

Parallel Computation”

Page 40: Paralela7

40

Partición en bloques FFT 1D

• Usando una partición en

bloques (m/p eltscontiguos por procesador)

• No hay comunicación en los últimos log m/p pasos

• Cada paso necesita

comunicación de grano fino en los primeros log p

pasos

Page 41: Paralela7

41

Partición cíclica FFT 1D

• Partición cíclica (sólo 1

elemento por procesador, circular o

“wrapped”)

• No hay comunicación

en los primeros log(m/p) pasos

• Comunicación en los

últimos log(p) pasos

Page 42: Paralela7

42

Complejidad Paralela

• m = tamaño del vector, p = número de procesadores

• f = tiempo por flop = 1

• α = latencia por mensaje (en unidades f)

• β = tiempo por palabra “word” en el mensaje (en unidades f)

• Tiempo(FFT_bloques) = Tiempo(FFT_cíclico) =

2*m*log(m)/p

+ log(p) * α+ m*log(p)/p * β

Page 43: Paralela7

43

FFT con “Transposición”

• Si empezamos con

partición cíclica para los primeros log(p) pasos,

no hay comunicación

• Luego transponemos el

vector para los últimos log(m/p) pasos

• Sólo hay comunicación

en la transposición

Page 44: Paralela7

44

¿Porqué se le llama transposición?

• Análogo a la transpuesta de una matriz

• Ver como una matriz 2D de n/p por p

• Nota: la misma idea es útil en uniprocesadores con

cache.

Page 45: Paralela7

45

Complejidad de la FFT con Transposición

• Si la comunicación no es simultánea (suposición!)

• Tiempo(FFT_transp) =

2*m*log(m)/p igual que antes

+ (p-1) * α era log(p) * α+ m*(p-1)/p2 * β era m* log(p)/p ∗ β

• Si la comunicación es simultánea, no se cuenta el

tiempo de p-1 mensajes si no de uno, el segundo

término se convierte en α, en vez de (p-1)α.

• Es casi lo óptimo. Ver paper LogP.

• Ver estos otros papers• A. Sahai, “Hiding Communication Costs in Bandwidth Limited FFT”

• R. Nishtala et al, “Optimizing bandwidth limited problems using one-

sided communication”

Page 46: Paralela7

46

Comentario al FFT 1D paralelo

• Este algoritmo deja la data en orden bit-reversed• Algunas aplicaciones la pueden usar así no más, como Poisson

• Otras necesitan una transposición adicional

• Hay otros algoritmos paralelos para FFT• Uno es de Edelman (ver http://www-math.mit.edu/~edelman)

• Basado en el algoritmo rápido de Multipolos

• Menos comunicación para un algoritmo que no deja los elementos en orden bit reversed

Page 47: Paralela7

47

FFTs en 2D, 3D

• FFTs en 2 o 3 dimensiones son FFTs 1D en vectores en todas las dimensiones.

• Ej. un FFT 2D hace varios FFTs 1D en todas las filas y luego en todas las columnas

• Hay 3 posibilidades obvias para un FFT 2D:• (1) Partición bloques 2D para la matriz, usar algoritmos 1D para

cada fila y columna

• (2) Partición de bloques de filas para la matriz, usar FFTs 1D seriales en las filas, seguidos de una transposición, luego más FFTs 1D seriales

• (3) Partición de bloques de filas para la matriz, usar FFTs 1D seriales en las filas, luego FFTs 1D paralelos en las columnas

• Opción 2 es mejor, si hacemos coincidir la comunicación y la computación

• Para un FFT 3D las opciones son similares• 2 phases done with serial FFTs, followed by a transpose for 3rd

• can overlap communication with 2nd phase in practice

Page 48: Paralela7

48

FFTW – Fastest Fourier Transform in the West

• Mismo “la pistola más rápida del oeste”

• www.fftw.org

• Producen una implementación de la FFT optimizada

para:• El tipo de FFT (compleja, real,…)

• Cualquier valor de n (arbitrario, primo)

• Varias arquitecturas

• Casi optimo para serial, se debe mejorar al paralelizar

• Ganó el Premio Wilkinson 1999 para Software numérico

• Muy usada.