OpenCL 
Prototipação de Circuitos Digitais 
Thyago Maia 
E-mail: tmtf@cin.ufpe.br
Sumário 
• Introdução; 
• Instalando e Setando o OpenCL; 
• Funcionamento de uma aplicação OpenCL 
típica; 
• Kernels; 
• ...
Introdução
Why Parallel??? 
• Para arar um campo com 100 metros quadrados, qual a 
melhor escolha: Dois bois fortes ou 1000 galinhas?...
Why Parallel??? 
• Anteriormente: 
– Speedup de software era conquistado através de CPUs 
com altas frequências de clock; ...
Programação Paralela 
• Para a implementação de programas paralelos, é 
necessário seguir as seguintes etapas: 
1. Analisa...
OpenCL (Open Computing Language) 
• Conjunto de rotinas e padrões (API) a serem utilizadas 
em programas que funcionam em ...
OpenCL (Open Computing Language) 
2014.2 Prototipação de Circuitos Digitais 8
OpenCL (Open Computing Language) 
• Permite abstrair o fluxo tradicional de 
desenvolvimento de hardware em FPGAs; 
– Dese...
OpenCL (Open Computing Language) 
• Portabilidade 
2014.2 Prototipação de Circuitos Digitais 10
Instalando e Setando o 
OpenCL
Instalando e Setando o OpenCL 
• Cada plataforma compatível possui uma 
implementação OpenCL específica; 
• Tais implement...
Instalando e Setando o OpenCL 
• Alguns tutoriais interessantes: 
– The OpenCL Programming Book 
• http://www.fixstars.com...
Funcionamento de uma 
Aplicação OpenCL típica
Como uma Aplicação Típica OpenCL funciona 
1. Host aloca memória no Device 
– clCreateBuffer(...); 
1. Host copia dados de...
Modelo de Programação OpenCL 
Programa em OpenCL 
(Escrito em C com extensões específicas) 
Código de Host Código do Devic...
Modelo de Programação OpenCL 
2014.2 Prototipação de Circuitos Digitais 17
Kernels
Definindo a Computação no Device 
• Kernels são semelhantes a programas seriais 
– Funções em C e palavras reservadas que ...
Definindo a Computação no Device 
2014.2 Prototipação de Circuitos Digitais 20
Exemplo: Elevar ao Quadrado Cada Elemento de um Array 
• Uma função C típica: 
void square(int *out, int *in) 
{ 
int i; 
...
Exemplo: Elevar ao Quadrado Cada Elemento de um Array 
• Adaptando a função anterior para um kernel: 
__kernel void square...
Codificando Kernels 
• Começam com a palavra reservada __kernel; 
• Sempre retornam void; 
• O espaço de endereçamento de ...
Modelo de Memória 
Host Memory 
Device 
Host 
2014.2 Prototipação de Circuitos Digitais 24
Modelo de Memória 
• Latência: 
– Local Memory > Shared Memory >> Global Memory >> 
Host Memory; 
• Terminologia OpenCL: 
...
Distinção entre regiões de memória em um Kernel 
• Exemplo: 
__kernel void square(__global int *out, 
__global int *in) 
{...
Funções para identificação de Work-Items (Threads) 
2014.2 Prototipação de Circuitos Digitais 27
Funções para identificação de Work-Items (Threads) 
2014.2 Prototipação de Circuitos Digitais 28
Aplicação Host
Aplicação Host 
• Controla a execução dos kernels nos Devices; 
• Comunica-se com Devices a partir de uma série de 
rotina...
Aplicação Host 
2014.2 Prototipação de Circuitos Digitais 31
Estrutura Típica de uma aplicação Host 
Bibliotecas e Constantes 
int main(void) { 
Váríaveis de Host 
Carregar arquivo do...
Estrutura Típica de uma aplicação Host 
Bibliotecas e Constantes 
int main(void) { 
... 
Criar um objeto de programa para ...
Estrutura Típica de uma aplicação Host 
Bibliotecas e Constantes 
int main(void) { 
... 
} 
Ler os dados contidos nos buff...
Objetos OpenCL 
• Objetos de Setup: 
– Devices: CPU, GPU, FPGA; 
– Contexts: Coleção de Devices; 
– Queue: Tarefa para o D...
Exemplo
Exemplo 
Aplicação Host 
(main.c) 
Kernel 
(vector_add_kernel.cl) 
Fonte: The Big Blob: Getting Started with OpenCL and GP...
Exemplo 
2014.2 Prototipação de Circuitos Digitais 38
FPGAs como Devices 
OpenCL
FPGAs Modernos: Massivamente paralelos 
• Mais de um milhão de 
elementos lógicos; 
• Bilhões de transistores; 
• Milhares...
FPGAs Modernos: Massivamente paralelos 
• O paralelismo de granularidade fina de um FPGA pode 
ser usado na criação de “pr...
Modelos de Programação 
• Modelo de Programação em FPGAs: RTL 
– Envolve máquinas de estado, datapaths, arbitragem, 
buffe...
Arquitetura FPGA para OpenCL 
2014.2 Prototipação de Circuitos Digitais 43
Compilando OpenCL para FPGAs 
2014.2 Prototipação de Circuitos Digitais 44
Fluxo de Projeto Altera OpenCL 
2014.2 Prototipação de Circuitos Digitais 45
Fluxo de Projeto Altera OpenCL 
2014.2 Prototipação de Circuitos Digitais 46
Placas com suporte OpenCL 
2014.2 Prototipação de Circuitos Digitais 47
Placas com suporte OpenCL - Nallatech 
2014.2 Prototipação de Circuitos Digitais 48
Referências
Referências 
• Tsuchiyama, R., Nakamura, T., Lizuka, T., Asahara, A., Son, J., Miki, S. 
The OpenCL Programming Book. Fixt...
Obrigado! 
Thyago Maia Tavares de Farias 
E-mail: tmtf@cin.ufpe.br 
Slideshare: http://slideshare.net/thyagomaia 
Lattes: ...
Próximos SlideShares
Carregando em…5
×

OpenCL - Seminário para a Disciplina "Prototipação de Circuitos Digitais" - CIn - UFPE

590 visualizações

Publicada em

OpenCL - Seminário para a Disciplina "Prototipação de Circuitos Digitais" - CIn - UFPE

Publicada em: Educação
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
590
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
10
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

OpenCL - Seminário para a Disciplina "Prototipação de Circuitos Digitais" - CIn - UFPE

  1. 1. OpenCL Prototipação de Circuitos Digitais Thyago Maia E-mail: tmtf@cin.ufpe.br
  2. 2. Sumário • Introdução; • Instalando e Setando o OpenCL; • Funcionamento de uma aplicação OpenCL típica; • Kernels; • Aplicação Host; • Exemplo; • Estudo de Caso: FPGAs como Devices OpenCL;
  3. 3. Introdução
  4. 4. Why Parallel??? • Para arar um campo com 100 metros quadrados, qual a melhor escolha: Dois bois fortes ou 1000 galinhas? X 2014.2 Prototipação de Circuitos Digitais 4
  5. 5. Why Parallel??? • Anteriormente: – Speedup de software era conquistado através de CPUs com altas frequências de clock; • Aumento no consumo de energia; • Aumento na dissipação de calor; • “Power Wall”; • Atualmente: – Aumento no número de unidades de processamento; • Software projetado na forma tradicional não se beneficia com este novo modelo; • Software deve ser projetado para ser executado por múltiplas unidades de processamento, além de executar processos em paralelo; 2014.2 Prototipação de Circuitos Digitais 5
  6. 6. Programação Paralela • Para a implementação de programas paralelos, é necessário seguir as seguintes etapas: 1. Analisar as dependências dentro de estruturas de dados, processos, etc., a fim de determinar quais as seções podem ser executadas em paralelo; 2. Implementar o melhor algoritmo que possa ser executado em várias unidades de processamento; 3. Reescrever o código utilizando um framework como MPI, OpenMP ou OpenCL; 2014.2 Prototipação de Circuitos Digitais 6
  7. 7. OpenCL (Open Computing Language) • Conjunto de rotinas e padrões (API) a serem utilizadas em programas que funcionam em plataformas heterogêneas; – CPUs, GPUs, FPGAs, etc.; • Estende GPUs para além do processamento gráfico; – GPGPU (Unidade de Processamento Gráfico de Propósito Geral) • Permite a programação paralela; – Paralelismo de dados; – Paralelismo de tarefas; 2014.2 Prototipação de Circuitos Digitais 7
  8. 8. OpenCL (Open Computing Language) 2014.2 Prototipação de Circuitos Digitais 8
  9. 9. OpenCL (Open Computing Language) • Permite abstrair o fluxo tradicional de desenvolvimento de hardware em FPGAs; – Desenvolvimento de software em alto nível (C/C++); • O Framework inclui: – Linguagem OpenCL C; – Compilador OpenCL C; – OpenCL Runtime Library; • O consortium (lista curta): Apple, Altera, AMD, Broadcom, Intel, ARM, Ericsson, Texas Instruments, Samsung, IBM, Google e Fujitsu; 2014.2 Prototipação de Circuitos Digitais 9
  10. 10. OpenCL (Open Computing Language) • Portabilidade 2014.2 Prototipação de Circuitos Digitais 10
  11. 11. Instalando e Setando o OpenCL
  12. 12. Instalando e Setando o OpenCL • Cada plataforma compatível possui uma implementação OpenCL específica; • Tais implementações estão disponíveis em SDKs (Software Development Kits). Exemplos: – Intel: Intel SDK for OpenCL; – AMD/ATI GPUs: AMD APP SDK; – NVIDIA GPUs: CUDA Toolkit; – Altera FPGAs: Altera SDK for OpenCL; • Dependendo da plataforma, também é necessária a instalação de drivers com suporte a OpenCL; • Os passos de instalação diferem entre SDKs, SOs e 2014.2 IDEs; Prototipação de Circuitos Digitais 12
  13. 13. Instalando e Setando o OpenCL • Alguns tutoriais interessantes: – The OpenCL Programming Book • http://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/opencl-– The Big Blob: Getting Started with OpenCL and GPU Computing • http://www.thebigblob.com/getting-started-with-opencl-and-gpu-computing/ – Altera SDK for OpenCL: Getting Started Guide • http://www.altera.com/literature/hb/opencl-sdk/aocl_getting_started.pdf – Kode-Stuff: Setting Up OpenCL in Visual Studio • http://kode-stuff.blogspot.com.br/2012/11/setting-up-opencl-in-visual- studio_1.html 2014.2 Prototipação de Circuitos Digitais 13
  14. 14. Funcionamento de uma Aplicação OpenCL típica
  15. 15. Como uma Aplicação Típica OpenCL funciona 1. Host aloca memória no Device – clCreateBuffer(...); 1. Host copia dados de entrada para o Device – clEnqueueWriteBuffer(...); 1. Host lança kernel(s) para o Device processar os dados – clEnqueueNDRangeKernel(...); 1. Host copia a(s) saída(s) gerada(s) pelo Device – clEnqueueReadBuffer(...); 2014.2 Prototipação de Circuitos Digitais 15
  16. 16. Modelo de Programação OpenCL Programa em OpenCL (Escrito em C com extensões específicas) Código de Host Código do Device Coprocessador HOST DEVICE Memória Kernel clEnqueueWriteBuffer Memória clEnqueueReadBuffer clCreateBuffe r 2014.2 Prototipação de Circuitos Digitais 16
  17. 17. Modelo de Programação OpenCL 2014.2 Prototipação de Circuitos Digitais 17
  18. 18. Kernels
  19. 19. Definindo a Computação no Device • Kernels são semelhantes a programas seriais – Funções em C e palavras reservadas que denotam o paralelismo e níveis de memória; • Cada programa codificado será executado por UMA Thread; – No host, especificamos quantas Threads serão utilizadas pelo Device para executar cada instância de programa; • O Device irá executar seu programa em várias Threads (especificadas no Host); 2014.2 Prototipação de Circuitos Digitais 19
  20. 20. Definindo a Computação no Device 2014.2 Prototipação de Circuitos Digitais 20
  21. 21. Exemplo: Elevar ao Quadrado Cada Elemento de um Array • Uma função C típica: void square(int *out, int *in) { int i; for(i=0; i<64; i++) { out[i] = in[i] * in[i]; } 1. Apenas uma Thread em execução; 2. Não há paralelismo explícito; 3. Serão executadas 64 multiplicações em 128 ns • Considerando que cada multiplicação leva 2ns; } 2014.2 21
  22. 22. Exemplo: Elevar ao Quadrado Cada Elemento de um Array • Adaptando a função anterior para um kernel: __kernel void square(__global int *out, __global int *in) { int i = get_global_id(0); out[i] = in[i] * in[i]; 1. 64 Threads em execução; 2. Há paralelismo explícito; 3. Serão executadas 64 multiplicações em 2 ns • Considerando que cada multiplicação leva 2ns; } Kernel 2014.2 22
  23. 23. Codificando Kernels • Começam com a palavra reservada __kernel; • Sempre retornam void; • O espaço de endereçamento de qualquer argumento deve ser especificado: – __local – __global – __constant 2014.2 Prototipação de Circuitos Digitais 23
  24. 24. Modelo de Memória Host Memory Device Host 2014.2 Prototipação de Circuitos Digitais 24
  25. 25. Modelo de Memória • Latência: – Local Memory > Shared Memory >> Global Memory >> Host Memory; • Terminologia OpenCL: – Global Memory: __global – Shared Memory: __local – Local Memory: Não há anotações necessárias 2014.2 Prototipação de Circuitos Digitais 25
  26. 26. Distinção entre regiões de memória em um Kernel • Exemplo: __kernel void square(__global int *out, __global int *in) { int i = get_global_id(0); __local int f = in[i]; d_out[i] = f * f; } Escopo Global Escopo Local Escopo Compartilhad o 2014.2 26
  27. 27. Funções para identificação de Work-Items (Threads) 2014.2 Prototipação de Circuitos Digitais 27
  28. 28. Funções para identificação de Work-Items (Threads) 2014.2 Prototipação de Circuitos Digitais 28
  29. 29. Aplicação Host
  30. 30. Aplicação Host • Controla a execução dos kernels nos Devices; • Comunica-se com Devices a partir de uma série de rotinas fornecidas pela OpenCL Runtime Library; – Abstrai a comunicação entre o processador Host e o acelerador (Device); • Escrito normalmente em C, mas pode ser programado em outras linguagens, como C++ e Python; 2014.2 Prototipação de Circuitos Digitais 30
  31. 31. Aplicação Host 2014.2 Prototipação de Circuitos Digitais 31
  32. 32. Estrutura Típica de uma aplicação Host Bibliotecas e Constantes int main(void) { Váríaveis de Host Carregar arquivo do Kernel Obter informações da(s) plataforma(s) e do Device(s) Criar um contexto OpenCL Criar uma fila de comandos Criar buffers de memória no Device para cada variável de Host ... 2014.2 Prototipação de Circuitos Digitais 32
  33. 33. Estrutura Típica de uma aplicação Host Bibliotecas e Constantes int main(void) { ... Criar um objeto de programa para o Kernel carregado Compilar o programa criado Criar o objeto de Kernel OpenCL Setar os argumentos do Kernel Executar o Kernel na fila de comandos ... 2014.2 Prototipação de Circuitos Digitais 33
  34. 34. Estrutura Típica de uma aplicação Host Bibliotecas e Constantes int main(void) { ... } Ler os dados contidos nos buffers de memória do Device e atribuir a variáveis de Host Liberar memória 2014.2 Prototipação de Circuitos Digitais 34
  35. 35. Objetos OpenCL • Objetos de Setup: – Devices: CPU, GPU, FPGA; – Contexts: Coleção de Devices; – Queue: Tarefa para o Device; • Objetos de Memória: – Buffers: Blocos de Memória; • Execução: – Programs: Coleção de Kernels; – Kernels: Instância de argumentos/execução; 2014.2 Prototipação de Circuitos Digitais 35
  36. 36. Exemplo
  37. 37. Exemplo Aplicação Host (main.c) Kernel (vector_add_kernel.cl) Fonte: The Big Blob: Getting Started with OpenCL and GPU Computing http://www.thebigblob.com/getting-started-with-opencl-and-gpu-computing/ 2014.2 Prototipação de Circuitos Digitais 37
  38. 38. Exemplo 2014.2 Prototipação de Circuitos Digitais 38
  39. 39. FPGAs como Devices OpenCL
  40. 40. FPGAs Modernos: Massivamente paralelos • Mais de um milhão de elementos lógicos; • Bilhões de transistores; • Milhares de blocos de memória de 20 Kb; • Milhares de blocos DSP; • Transceivers de alta velocidade; 2014.2 Prototipação de Circuitos Digitais 40
  41. 41. FPGAs Modernos: Massivamente paralelos • O paralelismo de granularidade fina de um FPGA pode ser usado na criação de “processadores” customizados que são, em ordem de magnitude, mais eficientes que CPUs ou GPUs; • Sistemas poderão possuir vários tipos de “processadores” que poderão ser customizados de maneira similar; 2014.2 Prototipação de Circuitos Digitais 41
  42. 42. Modelos de Programação • Modelo de Programação em FPGAs: RTL – Envolve máquinas de estado, datapaths, arbitragem, buffering, entre outros; • Modelo Típico de Programação em CPUs: C/C++ – Tipicamente sequencial, envolve o uso de sub-rotinas e funções; • É necessário um modelo de programação que represente tais sistemas heterogêneos (CPU+FPGA); • A meta: Um ÚNICO ambiente de desenvolvimento de Hardware e Software para os dois modelos; 2014.2 Prototipação de Circuitos Digitais 42
  43. 43. Arquitetura FPGA para OpenCL 2014.2 Prototipação de Circuitos Digitais 43
  44. 44. Compilando OpenCL para FPGAs 2014.2 Prototipação de Circuitos Digitais 44
  45. 45. Fluxo de Projeto Altera OpenCL 2014.2 Prototipação de Circuitos Digitais 45
  46. 46. Fluxo de Projeto Altera OpenCL 2014.2 Prototipação de Circuitos Digitais 46
  47. 47. Placas com suporte OpenCL 2014.2 Prototipação de Circuitos Digitais 47
  48. 48. Placas com suporte OpenCL - Nallatech 2014.2 Prototipação de Circuitos Digitais 48
  49. 49. Referências
  50. 50. Referências • Tsuchiyama, R., Nakamura, T., Lizuka, T., Asahara, A., Son, J., Miki, S. The OpenCL Programming Book. Fixtars, 2010. Disponível em: http://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/co ntents/. Acesso em 29 de nov. 2014. • Smistad, E. The Big Blob – Getting Started with OpenCL and GPU Computing. Disponível em: http://www.thebigblob.com/getting-started-with- opencl-and-gpu-computing/. Acesso em: 29 de nov. 2014. • Nanda, A. OpenCL for FPGAs Webcast. Altera Corporation, 2012. Disponível em: http://www.altera.com/education/webcasts/all/source-files/ wc-2012-opencl/player.html. Acesso em: 29 de nov. 2014. • ALTERA Corporation, Acceleware. Writing OpenCL Programs for Altera FPGA. Disponível em: http://www.altera.com/products/software/opencl/opencl-index. html#training. Acesso em 30 de nov. 2014 2014.2 Prototipação de Circuitos Digitais 50
  51. 51. Obrigado! Thyago Maia Tavares de Farias E-mail: tmtf@cin.ufpe.br Slideshare: http://slideshare.net/thyagomaia Lattes: http://lattes.thyagomaia.net LinkedIn: https://br.linkedin.com/in/thyagomaia

×