38
Transformadas de Fourier Clase 11, 13/05/2015 http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases

Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

  • Upload
    others

  • View
    7

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Transformadas de Fourier

Clase 11, 13/05/2015http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases

Page 2: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Pero antes... streams with Thrust

Page 3: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Streams con Thrust

Ejemplo de clase de streams reciclado ...● cp -r /share/apps/codigos/alumnos_icnpg2015/streams_thrust .

Incluimos thrust 1.8 headers (no necesario con cuda 7 toolkit)● nvcc async_thrust.cu -I /share/apps/codigos/thrust-master

Ejecutamos nvprof -o a.prof ./a.out ● qsub submit_gpu.sh

Verificar concurrencia de streams (overlaps copy-kernel, kernel-kernel...)

● Nvpp → import a.prof

Page 4: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Transformadas de Fourier

Clase 11, 13/05/2015http://fisica.cab.cnea.gov.ar/gpgpu/index.php/en/icnpg/clases

Page 5: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Random123:

a Library of Counter-Based

Random Number Generators

C++ template library en GPU/CPU Random Numbers en GPU/CPU

Librerias hasta ahora

CUFFT Transformada Rápida de Fourier en GPU

Algebra lineal densa en GPU/CPU

Page 6: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

¿ Que es la CUFFT ?

The FFT is a divide-and-conquer algorithm for efficiently computing discrete Fouriertransforms of complex or real-valued data sets. It is one of the most important andwidely used numerical algorithms in computational physics and general signalprocessing. The CUFFT library provides a simple interface for computing FFTs on anNVIDIA GPU, which allows users to quickly leverage the floating-point power andparallelism of the GPU in a highly optimized and tested FFT library.

Page 7: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

¿ Que se puede hacer con CUFFT ?

Page 8: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

h(t)

tSimetrías

“Descomposición en senos y cosenos”

Ver Por ej: Press etal, Numerical Recipes

Repaso de Transformada de Fourier

Page 9: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

h(t)

t

Repaso de Transformada de Fourier

Page 10: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Convolution theorem Correlation theorem

h(t)

t

Porque es tan importante la transformada de Fourier en física computacional ?

Operador...

Interacción...

“Descomposición en senos y cosenos”

Repaso de Transformada de Fourier

Page 11: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Patrones magnéticos (en 2D)

Discretización + Transformada de Fourier

Requiere transformar/antitransformar matrices en cada paso de tiempo....

Lineal pero No-local

Local y lineal

Naive: O(N*N)

PseudoEspectral:O(N log(N))

Page 12: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Convolution theorem Correlation theorem

h(t)

t

Porque es tan importante la transformada de Fourier en física computacional ?

Operador...

Interacción...

“Descomposición en senos y cosenos”

Repaso de Transformada de Fourier

Page 13: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

h(t)

Sampling theorem

Transformadadiscreta

Transformada de Fourier discreta

Page 14: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Transformadadiscreta

Anti-Transformada

h(t)

Transformada de Fourier discreta

Page 15: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Transformada discreta 2D

Transformada discreta 3D, etc

Transformada discreta 1D

Transformada de Fourier discreta

Page 16: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Transformadadiscreta

Anti-Transformada

h(t)

Transformada de Fourier discreta

Page 17: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Transformadadiscreta

Anti-Transformada

h(t)

Como calcularlas eficientemente?

Naïve approach [hasta ~1960]: O(N*N)Algoritmos de Fast Fourier transform (FFT) [Cooley–Tukey o Gauss?] : O(N*log2 N) → recursivo

AlgoritmosSecuenciales

Transformada de Fourier discreta

Page 18: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

● La librería pública de FFT mas popular:

“La mas rápida del oeste”

Our benchmarks, performed on on a variety of platforms, show that FFTW's performance is typically superior to that of other publicly available FFT software, and is even competitive with vendor-tuned codes. In contrast to vendor-tuned codes, however, FFTW's performance is portable: the same program will perform well on most architectures without modification. Hence the name, "FFTW," which stands for the somewhat whimsical title of "Fastest Fourier Transform in the West."

MKL: Math Kernel LibraryIntel's Math Kernel Library (MKL) is a library of optimized, math routines for science, engineering, and financial applications. Core math functions include BLAS, LAPACK, ScaLAPACK, Sparse Solvers, Fast Fourier Transforms, and Vector Math.

The library supports Intel and compatible processors and is available for Windows, Linux and Mac OS X operating systems.

● Vendor-tuned codes:

Fast Fourier Transforms

Page 19: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

CUFFT

Page 20: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

CUFFT

Page 21: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

CUFFT Samples

Page 22: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Ejemplo de CUFFT3D Complex-to-Complex Transforms #define NX 64#define NY 64#define NZ 128

cufftHandle plan;cufftComplex *data1, *data2;cudaMalloc((void**)&data1, sizeof(cufftComplex)*NX*NY*NZ);cudaMalloc((void**)&data2, sizeof(cufftComplex)*NX*NY*NZ);/* Create a 3D FFT plan. */cufftPlan3d(&plan, NX, NY, NZ, CUFFT_C2C);

/* Transform the first signal in place. */cufftExecC2C(plan, data1, data1, CUFFT_FORWARD);

/* Transform the second signal using the same plan. */cufftExecC2C(plan, data2, data2, CUFFT_FORWARD);

/* Destroy the cuFFT plan. */cufftDestroy(plan);cudaFree(data1); cudaFree(data2);

Page 23: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

CUFFT y Thrust

#include <cufft.h>typedef cufftDoubleReal REAL;typedef cufftDoubleComplex COMPLEX;// includes de thrust

int main(){// declaro/aloco arrays input, y su transformada, output thrust::device_vector<REAL> input(N);thrust::device_vector<COMPLEX> output(N/2+1);

// llenar input[] con alguna señal ...

// cast a punteros normales a memoria del deviceREAL * d_input_raw = thrust::raw_pointer_cast(&input[0]);

COMPLEX * d_output_raw = thrust::raw_pointer_cast(&output[0]);

cufftHandle planfft; // declara un plan ... cufftPlan1d(&planfft,N,CUFFT_R2C,1); // lo inicializa ...

cufftExecR2C(planfft, d_input_raw, d_output_raw); // y lo ejecuta ...

// copio la transformada del device al host, y la imprimothrust::host_vector<REAL> output_host = output;for(i=0; i < N/2+1; i++) cout << output_host[i].x << “ ” << output_host[i].y << endl;

}

Page 24: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Ecuación de difusión o “del calor” en dos dimensiones con fuentes arbitrarias

Campo escalar bidimensional Fuentes dependientes del espacio y del tiempo

Fluídos [Navier-Stokes]

Magnetismo[Ginzburg-Landau]

Etc...

Física Estadística [Fokker-Planck]

Mecánica Cuántica[Schrodinger]

Page 25: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Transformando Fourier

Solución analítica!

Modos desacoplados

Ecuación de difusión o “del calor” en dos dimensiones con fuentes arbitrariasen el espacio de Fourier

Page 26: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Esquema explícito

Ecuación de difusión con fuentes arbitrarias

Esquema implícito [Crank-Nicholson]

Diferencias finitas espaciales

Page 27: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Diferencias finitas

-4C'+1C' C'

C'

C'

0

0 0

0

Convolucion en 2D

Stencil h

Se puede resolver en el espacio real, Pero lo haremos en espacio de Fourier

Ecuación de difusión con fuentes arbitrarias

Page 28: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

-4C'+1C' C'

C'

C'

0

0 0

0

Stencil h

Todo desacoplado :-)

Ecuación de difusión con fuentes arbitrarias

Aplicar el stencil o hacer la convolucion 2D en el espacio real se reduce a multiplicar por un campo escalar constante la transformada

Page 29: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Ecuación de difusión con fuentes arbitrarias

Esto se calcula una sola vez al principio

Loop temporal

for(t=0;t<TRUN;t++){

}

Euler StepTrivialmenteParalelizable

Page 30: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Ecuación de difusión con fuentes arbitrarias

Euler StepTrivialmenteParalelizable

// Paso de Euler en el espacio de Fourier __global__ void euler_step(cufftComplex *a, const cufftComplex *b, const float *qqmodule, int nx, int ny){// idx and idy, the location of the element in the original NxN array int idx = blockIdx.x*blockDim.x+threadIdx.x; int idy = blockIdx.y*blockDim.y+threadIdx.y; if ( idx < nx && idy < ny){ int index = idx*ny + idy; const float fac=-(qqmodule[index]); a[index].x = (1.f+C_BETA*fac*DT)*a[index].x + DT*b[index].x; a[index].y = (1.f+C_BETA*fac*DT)*a[index].y + DT*b[index].y; } }

Conviene trabajarCon grillas 2D!

Page 31: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Ecuación de difusión con fuentes arbitrarias

Para dibujar (cada tanto) el campo en espacio real → CUFFT → memcpy

for(t=0;t<TRUN;t++){

}

Las fuentes son dadas instantaneamente en el espacio real, pero las necesitamos en Fourier → CUFFT

Kernel Paso de Euler

Page 32: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Hands-on! Ecuación de difusión con fuentes arbitrarias

● cp -r /share/apps/codigos/alumnos_icnpg2015/heat .● make● qsub script.sh

● Check .ppm images!

Page 33: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Ecuación de difusión con fuentes arbitrarias

Para dibujar (cada tanto) el campo en espacio real → CUFFT → memcpy

for(t=0;t<TRUN;t++){

}

Las fuentes son dadas instantaneamente en el espacio real, pero las necesitamos en Fourier → CUFFT

Kernel Paso de Euler

Page 34: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

main.cu

En este problema: Solo para hacer imágenes

Controla fuentes en espacio real...

Un paso de tiempo en el Espacio de Fourier

Hands-on: Ecuación de difusión con fuentes arbitrarias

Loop temporal principal

Page 35: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

Files: main.cu, heat.cu, ppmimages.cuh, Makefile, script.sh

10 FIXED FIXME:● Declaración de planes CUFFT 2D [forward y backward, R2C, C2R]● Alocación de memoria para arrays en espacio real y complejo● Ejecución de planes de transformada/antitransformada ● Destrucción de planes, liberación de memoria● Varios Kernels con grillas 2D Make & Run

● Producir imágenes / hacer película → ● Jugar con parámetros y fuentes...● Donde y como se puede optimizar?● Como agregar términos no lineales?

Hands-on: Ecuación de difusión con fuentes arbitrarias

Kernels, CUFFT Imágenes ppm a partir del campoen espacio real [host]

Loop temporal(alto nivel)

Page 36: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

“PlacaMetálica”[Condiciones de ContornoPeriódicas]

“Fuentecaliente”

“Fuente fría”

Una configuración de fuentes divertida

Temp(x,y,t)=???

Hands-on: Ecuación de difusión con fuentes arbitrarias

Page 37: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

“PlacaMetálica”[Condiciones de ContornoPeriódicas]

Una configuración de fuentes divertida

Hands-on: Ecuación de difusión con fuentes arbitrarias

Page 38: Transformadas de Fourier - Argentina.gob.arTransformadas de Fourier Clase 11, 13/05/2015

● CUFFT Library User Guide NVIDIA.

● CUDA Libraries SDK Code Samples (simpleCUFFT, PDEs, etc).

● FFTW home page: http://www.fftw.org/ [interface parecida para CPU + openmp, mpi].

● Numerical Recipes in C [algoritmo FFT explicado].

● Libros de Numerical PDEs.... [como discretizar las PDEs?]

Referencias