Implementa¸c˜ao da Transformada Discreta de
Fourier em OpenCL e JOCL
Bruno Mendes
Eden Ramos
Emiliano Carlos de Moraes Fir...
Sum´ario
Transformada de Fourier
Transformada Discreta de Fourier (DFT)
OpenCL
OpenCL Bindings
Implementa¸c˜ao da DFT
C - ...
Transformada de Fourier
F´ormula
f (x) =
+∞
−∞
F(n)ejn2πf1t
, dt (1)
Transformada Discreta de Fourier (DFT)
F´ormula
X[k] =
N−1
n=0
x[n]W nk
N (2)
W nk
N = e−j2πkn/N
= cos(
2πkn
N
) − jsen(
2...
DFT Multidimensional
F´ormula
F(u, v) =
M−1
m=0
(
N−1
n=0
x[u, v]e−j2π( un
N
)
)e−j2π( vm
M
)
(4)
F(u, v) =
M−1
m=0
F (u, ...
OpenCL
Introdu¸c˜ao
OpenCL
Framework padr˜ao da industria para programa¸c˜ao de
computadores composto pela combina¸c˜ao de...
OpenCL
Modelo de Plataforma
OpenCL
Modelo de Execu¸c˜ao
OpenCL
Modelo de Execu¸c˜ao
Elementos:
Dispositivo
Kernel
Objeto de Mem´oria
Objeto de Programa
Contexto:
Command-Queue
El...
OpenCL
Modelo de Mem´oria
OpenCL
Modelo de Programa¸c˜ao
Paralelismo:
Data Parallel
Task Parallel
OpenCL
Aplica¸c˜ao OpenCL
OpenCL Binding
Permite linguagens de alto n´ıvel executarem chamadas a
c´odigo nativo ou de baixo n´ıvel;
Objetivo ´e forn...
JOCL
Interface padr˜ao de programa¸c˜ao em Java para execu¸c˜ao de
c´odigo nativo: Java Native Interface (JNI);
JOCL ´e mu...
Implementa¸c˜ao da DFT
DFT 1D







X0
X1
X2
...
XN−1







=








1 1 1 1 · · · 1
1 w1
N w2
N ...
Implementa¸c˜ao da DFT
DFT 2D e 3D
DFT: 2D
DFT em cada linha
Transp˜oe
DFT em cada linha
Transp˜oe
DFT: 3D
DFT em cada lin...
Implementa¸c˜ao da DFT
C - OpenCL
#d e f i n e cmplx mult (u , v ) {
f l o a t 2 tmp;
tmp . x = ( u . x )∗( v . x ) − ( u ...
Implementa¸c˜ao da DFT
Java - JOCL
Listing 1: N´ucleo da implementa¸c˜ao da DFT 2D em JOCL
p u b l i c Complex [ ] [ ] cal...
Resultados Obtidos
DFT 2D
Entrada(N) CPU Intel E8400(s) GPU AMD HD6950(s)
512 8,0 0,2
1024 40,35 0,56
1536 142,52 1,56
204...
Resultados Obtidos
DFT 2D
Instˆancia E8400 HD6950
512 8,0 0,2
1024 40,35 0,56
1536 142,52 1,56
2048 342,21 3,16
2560 707,4...
Resultados Obtidos
DFT 2D CPU
Resultados Obtidos
DFT 2D GPU
Resultados Obtidos
DFT 3D
Instˆancia E8400 HD6950
64 1,49 0,28
128 16,84 0,43
192 285,24 2,65
256 342,21 3,16
320 658,96 7...
Resultados Obtidos
DFT 3D CPU
Resultados Obtidos
DFT 3D GPU
Conclus˜oes
O maior n´umero de n´ucleos existente na GPU permitiu um
ganho de aproximadamente dez vezes;
DFT desenvolvida ...
Trabalhos Futuros
Aplica¸c˜ao do algoritmo em imagens 2D e 3D;
Reimplementar utilizando o algoritmo da FFT.
D´uvidas
Próximos SlideShares
Carregando em…5
×

Implementação da dft em open cl e jocl

289 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
289
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
3
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Implementação da dft em open cl e jocl

  1. 1. 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
  2. 2. Sum´ario Transformada de Fourier Transformada Discreta de Fourier (DFT) OpenCL OpenCL Bindings Implementa¸c˜ao da DFT C - OpenCL Java - JOCL Resultados Conclus˜oes
  3. 3. Transformada de Fourier F´ormula f (x) = +∞ −∞ F(n)ejn2πf1t , dt (1)
  4. 4. Transformada Discreta de Fourier (DFT) F´ormula X[k] = N−1 n=0 x[n]W nk N (2) W nk N = e−j2πkn/N = cos( 2πkn N ) − jsen( 2πkn N ) (3)
  5. 5. DFT Multidimensional F´ormula F(u, v) = M−1 m=0 ( N−1 n=0 x[u, v]e−j2π( un N ) )e−j2π( vm M ) (4) F(u, v) = M−1 m=0 F (u, v)e−j2π( vm M ) (5)
  6. 6. OpenCL Introdu¸c˜ao OpenCL Framework padr˜ao da industria para programa¸c˜ao de computadores composto pela combina¸c˜ao de Unidade Central de Processamento (CPU), Unidade Gr´afica de Processamento (GPU) e outros processadores [Munshi et al. 2012]. Desenvolvido pelo Khronous Group OpenCL 1.2, 15 de Novembro de 2011 AMD, Intel, Nvidia, IBM, ARM, SoC, Texas Instrument, Qualcomm, Apple, ... Modelos: Plataforma, Execu¸c˜ao, Mem´oria e Programa¸c˜ao.
  7. 7. OpenCL Modelo de Plataforma
  8. 8. OpenCL Modelo de Execu¸c˜ao
  9. 9. OpenCL Modelo de Execu¸c˜ao Elementos: Dispositivo Kernel Objeto de Mem´oria Objeto de Programa Contexto: Command-Queue Elementos Device
  10. 10. OpenCL Modelo de Mem´oria
  11. 11. OpenCL Modelo de Programa¸c˜ao Paralelismo: Data Parallel Task Parallel
  12. 12. OpenCL Aplica¸c˜ao OpenCL
  13. 13. OpenCL Binding Permite linguagens de alto n´ıvel executarem chamadas a c´odigo nativo ou de baixo n´ıvel; Objetivo ´e fornecer abstra¸c˜oes da API nativa do OpenCL; Java, Python, Scala, Haskell, HTML5, C++, C#, dentre outras.
  14. 14. JOCL Interface padr˜ao de programa¸c˜ao em Java para execu¸c˜ao de c´odigo nativo: Java Native Interface (JNI); JOCL ´e muito pr´oxima do OpenCL original; Em JOCL, o kernel ´e programado em OpenCL puro, mas o programa hospedeiro ´e feito em Java.
  15. 15. Implementa¸c˜ao da DFT DFT 1D        X0 X1 X2 ... XN−1        =         1 1 1 1 · · · 1 1 w1 N w2 N w3 N · · · wN−1 N 1 w2 N w4 N w6 N · · · w 2(N−1) N ... ... ... ... · · · ... 1 wN−1 N w 2(N−1) N w 3(2N−1) N · · · w (N−1)(N−1) N                x0 x1 x2 ... xN−1       
  16. 16. Implementa¸c˜ao da DFT DFT 2D e 3D DFT: 2D DFT em cada linha Transp˜oe DFT em cada linha Transp˜oe DFT: 3D DFT em cada linha Transp˜oe (Colunas em Linhas) DFT em cada linha Transp˜oe (Profundidade em Linhas) DFT em cada linha Transp˜oe (Retorna ao Cubo original)
  17. 17. Implementa¸c˜ao da DFT C - OpenCL #d e f i n e cmplx mult (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 void DFT( g l o b a l f l o a t 2 ∗ timeIn , g l o b a l f l o a t 2 ∗ freqOut ){ 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 angle = −(2 ∗ M PI F ∗ k ) / N; f o r ( i n t n = 0; n < N; n++) { f l o a t 2 sample = timeIn [ n ] ; i f ( n | k ) { W. y = s i n c o s ( angle ∗ n , ( f l o a t ∗)&W) ; cmplx mult ( sample , W) ; } Xk += sample ; } freqOut [ k ] += Xk ; }
  18. 18. Implementa¸c˜ao da DFT Java - JOCL Listing 1: N´ucleo da implementa¸c˜ao da DFT 2D em JOCL p u b l i c Complex [ ] [ ] calculateDFT ( Complex [ ] [ ] input ) { f i n a l i n t N = input . length ; f i n a l i n t M = input [ 0 ] . length ; Complex [ ] [ ] output = new Complex [N ] [M] ; f o r ( i n t i =0; i <N; i++) output [ i ] = calculateDFT ( input [ i ] ) ; output = ComplexUtil . transpose ( output ) ; f o r ( i n t i =0; i <M; i++) output [ i ] = calculateDFT ( output [ i ] ) output = ComplexUtil . transpose ( output ) ; r e t u r n output ; }
  19. 19. Resultados Obtidos DFT 2D Entrada(N) CPU Intel E8400(s) GPU AMD HD6950(s) 512 8,0 0,2 1024 40,35 0,56 1536 142,52 1,56 2048 342,21 3,1634 2560 707,40 5,99 3072 - 10,20 3564 - 58,37 4096 - 72,18
  20. 20. Resultados Obtidos DFT 2D Instˆancia E8400 HD6950 512 8,0 0,2 1024 40,35 0,56 1536 142,52 1,56 2048 342,21 3,16 2560 707,40 5,99 3072 - 10,20 3564 - 58,37 4096 - 72,18
  21. 21. Resultados Obtidos DFT 2D CPU
  22. 22. Resultados Obtidos DFT 2D GPU
  23. 23. Resultados Obtidos DFT 3D Instˆancia E8400 HD6950 64 1,49 0,28 128 16,84 0,43 192 285,24 2,65 256 342,21 3,16 320 658,96 7,09 384 - 13,16
  24. 24. Resultados Obtidos DFT 3D CPU
  25. 25. Resultados Obtidos DFT 3D GPU
  26. 26. Conclus˜oes O maior n´umero de n´ucleos existente na GPU permitiu um ganho de aproximadamente dez vezes; DFT desenvolvida pode ser aplicada para entrada de pequenas dimens˜oes, com melhor desempenho se executadas em uma GPU compat´ıvel com OpenCL; Para aplica¸c˜oes em tempo real, necess´ario implementar a transformada r´apida de fourier (FFT).
  27. 27. Trabalhos Futuros Aplica¸c˜ao do algoritmo em imagens 2D e 3D; Reimplementar utilizando o algoritmo da FFT.
  28. 28. D´uvidas

×