You are on page 1of 3

Introduccin al Clculo Numrico

en procesadores grficos

Guia de Trabajos Prcticos 3


Fecha de entrega : 27/5/2015 23:59 AoE

GPGPU @ CABIB

GPGPU @ CABIB

Icnpg (2015)

El propsito de esta gua es ejercitar el uso de la librera CuFFT, Random123, y Thrust.

1. Transformada de una seal real unidimensional


Transf 1D Considere una seal real unidimensional continua
S(t) = 2A1 cos(2tf1 ) + 2A2 sin(2tf2 ).

(1)

Si sampleamos esta seal en N intervalos regulares t, y elegimos f1 = 1/(4t) y f2 = 1/(8t), tendremos un


muestreo dado por:
Sj = 2A1 cos(2j/4) + 2A2 sin(2j/8);
(2)
con j = 0, ..., N 1.
1. En g3ej1.cu se implementa la transformada Fourier de la seal de Ec.2 usando CUFFT. Elija en el Makefile un
N razonable y par, active la opcin para imprimir "-DIMPRIMIR" en el mismo, compile y corra el ejecutable (se
provee un script de submisin en gpu).
Examine "transformada.dat" y compare con la transformada analtica esperada de la secuencia Sj . Preste
atencin al ordenamiento de las frecuencias en el output de la transformada rpida. AYUDA: Use sin(x) =
[eix eix ]/2i , cos(x) = [eix + eix ]/2 para descomponer Ec.2 en modos de Fourier. Luego compare con
la frmula de la antitransformada discreta para identificar las amplitudes complejas de Fourier.
2. El cdigo simple_fftw_thrust_solucion.cpp contiene una versin completamente equivalente a g3ej1.cu,
pero que corre en el host, usando la librera de transformada rpida FFTW. Para compilar esta versin, ejecute:
(i) make simple_fftw, para compilar la versin single-thread y (ii) make simple_fftw_threads, para la
versin multithread que correr transformada paralelizada en una CPU-multicore. Se proveen dos scripts de
submisin para correr estas dos versiones en CPU.
(a) Examne simple_fftw_thrust_solucion.cpp, identificando las llamadas a rutinas de FFTW, comparndolas con las de CUFFT en g3ej1.cu.
(b) Compare para arrays suficientemente grandes (comente la opcin de imprimir en el Makefile!), para precisin simple y doble (elegir en el Makefile), los tiempos de ejecucin de las transformadas en los tres
casos: (1) CUFFT en la gpu, (2) FFTW single-thread en la cpu, y (3) FFTW-multithread en la cpu. Discuta
el resultado.
3. Ahora complete los TODO en g3ej1.cu para que el cdigo antitransforme la seal de Ec.2 transformada.
Verifique que el resultado final sea el correcto para cualquier la seal a transformar que elija!. AYUDA: Mire
bien la frmula de la transformada y de la antitransformada discretas.

2. Procesamiento de una seal real en modo BATCH con CUFFT


BATCH con CUFFT
Complete los TODO en g3ej2.cu para que cargue, del archivo "pendulo.txt", las tres componentes de la
aceleracin, "X", "Y" y "Z", generadas experimentalmente con un acelermetro colgado de un pndulo (casero)
de longitud L 1.5m. Utilice el intervalo [500,86910]ms, correspondiente a 8192 muestras cada 10ms en cada
direccin.
1. Calcule en la GPU (usando un kernel o un algoritmo de Thrust) el espectro de potencias (modulo cuadrado
de la transformada) de la aceleracin de cada componente, "X", "Y" y "Z", usando BATCHed transforms para
hacer las tres transformadas simultneamente en la GPU. Grafique el espectro de cada una, y la seal original.
2. Procesamiento de una seal real en modo BATCH con CUFFT continua en la pgina siguiente

2/3

GPGPU @ CABIB

Icnpg (2015)

2. Determine del espectro de potencias de cada componente (usando un kernel o un algoritmo de Thrust para la
transformacin). Identifique en los mismos la frecuencia correspondiente al perodo de oscilacin del pndulo
y estime con este la aceleracin de la gravedad.

3. Resuelva ecuaciones diferenciales usando solo partculas


Considere N partculas brownianas independientes movindose en una dimensin en posiciones Xi (t), tal que su
movimiento este descripto por
Xi (t + t) = Xi (t) + F (Xi (t))t +

2T tRi (t)

(3)

con i = 0, ..., N 1, y t el paso de tiempo. El ultimo termino representa una fuerza aleatoria o ruido trmico, con
el parmetro T representando la temperatura. Ri (t) se elije como un nmero aleatorio distribuido Gaussianamente,
con media cero y dispersin uno. Ri (t) tiene que estar descorrelacionado para distintas partculas (i.e. distintos
ndices i) y tambin para distintos tiempos t. Consideraremos condiciones peridicas en el intervalo [0, 1], es decir,
que las partculas se mueven en un anillo de permetro igual a 1, y tambin una funcin peridica F (X) en el mismo
intervalo.
Para fijar ideas, fijaremos primero como condicin inicial Xi (0) = 0, i (i.e. todas las partculas inicialmente en
el origen) y F (x) = x V (x), con
1
V (x) = sin(2x) + sin(4x)
(4)
4
1. Es la dinmica estocstica de partculas de la Ec.3 fcilmente paralelizable?. Porque?.
2. Simule en la gpu el movimiento de un numero grande N de tales partculas, completando los TODO en el
template de cdigo provisto g3ej3.cu, para un nmero suficientemente grande de iteraciones temporales.
3. Cada varios pasos, calcule y guarde un histograma normalizado de las posiciones de las partculas, completando
el template de cdigo provisto. Dibuje estos histogramas (opcionalmente, haga una pelcula de la evolucin de
los histogramas), y verifique la convergencia a una solucin estacionaria a tiempos largos.
4. Compare las performances del cdigo compilado para gpu y para cpu multicore (el Makefile genera ambas
simultneamente a partir del mismo fuente, usando Thrust backends).
5. Si complet exitosamente los dos pasos anteriores felicitaciones!: Ud acaba de resolver, usando slo partculas!
(sin grillas, ni aproximaciones a las derivadas, etc), la siguiente ecuacin diferencial no trivial:
t P (x, t) = T x2 P (x, t) + x [x V (x)P (x, t)].

(5)

en funcin del tiempo, con condiciones de contorno peridicas en el intervalo [0, 1], i.e. P (0, t) = P (1, t),
ya que los histogramas normalizados calculados con las partculas brownianas pueden identificarse con P (x, t).
Uno podra comparar a todo tiempo la solucin numrica o analtica de Ec. 5 con la obtenida con partculas.
Sin embargo, por simplicidad compare solo el histograma normalizado de las partculas para un tiempo muy
grande, con la solucin analtica estacionaria de la Ec. 5, dada por
P (x, t ) eV (x)/T .

(6)

Verifique este resultado para diferentes condiciones iniciales (por ejemplo uniforme en [0,1], etc.), "temperaturas" T , y tambin potenciales V (x) peridicos en [0,1]. Cual mtodo le parece mas paralelizable, el de
simular partculas, o el de resolver la ecuacin diferencial?. Cual ser el ms eficiente computacionalmente?.
Discuta.

3/3

You might also like