28
Implementa¸c˜ ao da Transformada Discreta de Fourier em OpenCL e JOCL Bruno Mendes Eden Ramos Emiliano Carlos de Moraes Firmino Universidade do Estado do Amazonas 12 de janeiro de 2012

Implementação da dft em open cl e jocl

Embed Size (px)

Citation preview

Page 1: Implementação da dft em open cl e jocl

Implementacao da Transformada Discreta deFourier em OpenCL e JOCL

Bruno MendesEden Ramos

Emiliano Carlos de Moraes Firmino

Universidade do Estado do Amazonas

12 de janeiro de 2012

Page 2: Implementação da dft em open cl e jocl

Sumario

Transformada de FourierTransformada Discreta de Fourier (DFT)

OpenCLOpenCL Bindings

Implementacao da DFTC - OpenCLJava - JOCL

Resultados

Conclusoes

Page 3: Implementação da dft em open cl e jocl

Transformada de FourierFormula

f (x) =

∫ +∞

−∞F (n)e jn2πf1t , dt (1)

Page 4: Implementação da dft em open cl e jocl

Transformada Discreta de Fourier (DFT)Formula

X [k] =N−1∑n=0

x [n]W nkN (2)

W nkN = e−j2πkn/N = cos(

2πkn

N)− jsen(

2πkn

N) (3)

Page 5: Implementação da dft em open cl e jocl

DFT MultidimensionalFormula

F (u, v) =M−1∑m=0

(N−1∑n=0

x [u, v ]e−j2π(unN))e−j2π(

vmM

) (4)

F (u, v) =M−1∑m=0

F ′(u, v)e−j2π(vmM

) (5)

Page 6: Implementação da dft em open cl e jocl

OpenCLIntroducao

OpenCL

Framework padrao da industria para programacao decomputadores composto pela combinacao de Unidade Central deProcessamento (CPU), Unidade Grafica de Processamento (GPU)e outros processadores [Munshi et al. 2012].

I Desenvolvido pelo Khronous Group

I OpenCL 1.2, 15 de Novembro de 2011

I AMD, Intel, Nvidia, IBM, ARM, SoC, Texas Instrument,Qualcomm, Apple, ...

I Modelos: Plataforma, Execucao, Memoria e Programacao.

Page 7: Implementação da dft em open cl e jocl

OpenCLModelo de Plataforma

Page 8: Implementação da dft em open cl e jocl

OpenCLModelo de Execucao

Page 9: Implementação da dft em open cl e jocl

OpenCLModelo de Execucao

I Elementos:I DispositivoI KernelI Objeto de MemoriaI Objeto de Programa

I Contexto:I Command-QueueI ElementosI Device

Page 10: Implementação da dft em open cl e jocl

OpenCLModelo de Memoria

Page 11: Implementação da dft em open cl e jocl

OpenCLModelo de Programacao

Paralelismo:

I Data Parallel

I Task Parallel

Page 12: Implementação da dft em open cl e jocl

OpenCLAplicacao OpenCL

Page 13: Implementação da dft em open cl e jocl

OpenCL Binding

I Permite linguagens de alto nıvel executarem chamadas acodigo nativo ou de baixo nıvel;

I Objetivo e fornecer abstracoes da API nativa do OpenCL;

I Java, Python, Scala, Haskell, HTML5, C++, C#, dentreoutras.

Page 14: Implementação da dft em open cl e jocl

JOCL

I Interface padrao de programacao em Java para execucao decodigo nativo: Java Native Interface (JNI);

I JOCL e muito proxima do OpenCL original;

I Em JOCL, o kernel e programado em OpenCL puro, mas oprograma hospedeiro e feito em Java.

Page 15: Implementação da dft em open cl e jocl

Implementacao da DFTDFT 1D

X0

X1

X2

...XN−1

=

1 1 1 1 · · · 1

1 w 1N w 2

N w 3N · · · wN−1

N

1 w 2N w 4

N w 6N · · · w

2(N−1)N

......

...... · · ·

...

1 wN−1N w

2(N−1)N w

3(2N−1)N · · · w

(N−1)(N−1)N

x0x1x2...

xN−1

Page 16: Implementação da dft em open cl e jocl

Implementacao da DFTDFT 2D e 3D

DFT: 2D

I DFT em cada linha

I Transpoe

I DFT em cada linha

I Transpoe

DFT: 3D

I DFT em cada linha

I Transpoe (Colunas em Linhas)

I DFT em cada linha

I Transpoe (Profundidade em Linhas)

I DFT em cada linha

I Transpoe (Retorna ao Cubo original)

Page 17: Implementação da dft em open cl e jocl

Implementacao da DFTC - OpenCL

#de f i n e cmplx mul t (u , v ) {\f l o a t 2 tmp ;\tmp . x = (u . x )∗( v . x ) − ( u . y )∗( v . y ) ;\tmp . y = (u . x )∗( v . y ) + (u . y )∗( v . x ) ;\u = tmp ;\

}

k e r n e l vo id DFT( g l o b a l f l o a t 2 ∗ t ime In , g l o b a l f l o a t 2 ∗ f r eqOut ){

i n t k = g e t g l o b a l i d ( 0 ) ;i n t N = g e t g l o b a l s i z e ( 0 ) ;

f l o a t 2 Xk = {0 ,0} ; f l o a t 2 W;f l o a t ang l e = −(2 ∗ M PI F ∗ k ) / N;

f o r ( i n t n = 0 ; n < N; n++) {f l o a t 2 sample = t ime I n [ n ] ;i f ( n | k ) {W. y = s i n c o s ( ang l e ∗ n , ( f l o a t ∗)&W) ;cmplx mul t ( sample , W) ;

}Xk += sample ;

}f r eqOut [ k ] += Xk ;

}

Page 18: Implementação da dft em open cl e jocl

Implementacao da DFTJava - JOCL

Listing 1: Nucleo da implementacao da DFT 2D em JOCL

p u b l i c Complex [ ] [ ] c a l c u l a t e D F T ( Complex [ ] [ ] i n p u t ) {f i n a l i n t N = i n p u t . l e n g t h ;f i n a l i n t M = i n p u t [ 0 ] . l e n g t h ;

Complex [ ] [ ] output = new Complex [N ] [M] ;f o r ( i n t i =0; i<N; i ++)

output [ i ] = c a l c u l a t e D F T ( i n p u t [ i ] ) ;

output = C o m p l e x U t i l . t r a n s p o s e ( output ) ;f o r ( i n t i =0; i<M; i ++)

output [ i ] = c a l c u l a t e D F T ( output [ i ] ) ;

output = C o m p l e x U t i l . t r a n s p o s e ( output ) ;r e t u r n output ;

}

Page 19: Implementação da dft em open cl e jocl

Resultados ObtidosDFT 2D

Entrada(N) CPU Intel E8400(s) GPU AMD HD6950(s)

512 8,0 0,21024 40,35 0,561536 142,52 1,562048 342,21 3,16342560 707,40 5,993072 - 10,203564 - 58,374096 - 72,18

Page 20: Implementação da dft em open cl e jocl

Resultados ObtidosDFT 2D

Instancia E8400 HD6950512 8,0 0,21024 40,35 0,561536 142,52 1,562048 342,21 3,162560 707,40 5,993072 - 10,203564 - 58,374096 - 72,18

Page 21: Implementação da dft em open cl e jocl

Resultados ObtidosDFT 2D CPU

Page 22: Implementação da dft em open cl e jocl

Resultados ObtidosDFT 2D GPU

Page 23: Implementação da dft em open cl e jocl

Resultados ObtidosDFT 3D

Instancia E8400 HD695064 1,49 0,28128 16,84 0,43192 285,24 2,65256 342,21 3,16320 658,96 7,09384 - 13,16

Page 24: Implementação da dft em open cl e jocl

Resultados ObtidosDFT 3D CPU

Page 25: Implementação da dft em open cl e jocl

Resultados ObtidosDFT 3D GPU

Page 26: Implementação da dft em open cl e jocl

Conclusoes

I O maior numero de nucleos existente na GPU permitiu umganho de aproximadamente dez vezes;

I DFT desenvolvida pode ser aplicada para entrada de pequenasdimensoes, com melhor desempenho se executadas em umaGPU compatıvel com OpenCL;

I Para aplicacoes em tempo real, necessario implementar atransformada rapida de fourier (FFT).

Page 27: Implementação da dft em open cl e jocl

Trabalhos Futuros

I Aplicacao do algoritmo em imagens 2D e 3D;

I Reimplementar utilizando o algoritmo da FFT.

Page 28: Implementação da dft em open cl e jocl

Duvidas