Implementação da dft em open cl e jocl

Preview:

Citation preview

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

Sumario

Transformada de FourierTransformada Discreta de Fourier (DFT)

OpenCLOpenCL Bindings

Implementacao da DFTC - OpenCLJava - JOCL

Resultados

Conclusoes

Transformada de FourierFormula

f (x) =

∫ +∞

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

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)

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)

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.

OpenCLModelo de Plataforma

OpenCLModelo de Execucao

OpenCLModelo de Execucao

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

I Contexto:I Command-QueueI ElementosI Device

OpenCLModelo de Memoria

OpenCLModelo de Programacao

Paralelismo:

I Data Parallel

I Task Parallel

OpenCLAplicacao OpenCL

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.

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.

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

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)

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 ;

}

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 ;

}

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

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

Resultados ObtidosDFT 2D CPU

Resultados ObtidosDFT 2D GPU

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

Resultados ObtidosDFT 3D CPU

Resultados ObtidosDFT 3D GPU

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).

Trabalhos Futuros

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

I Reimplementar utilizando o algoritmo da FFT.

Duvidas

Recommended