Upload
emiliano-firmino
View
126
Download
2
Embed Size (px)
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