segunda-feira, 10 de novembro de 2014

Implementando aplicativos Open Computing Language (OpenCL) com aceleradores baseados em FPGA.




           O site da Altera [www.altera.com] possui vários exemplos que demonstram como descrever várias aplicações em OpenCL, juntamente com as referentes aplicações de host, que você pode compilar e executar em um host com placa FPGA com suporte ao SDK Altera
            Cada exemplo da Altera está disponível em duas versões uma para Linux, em tar.gz e outra para Windows, em .zip, além de disponibilizar uma lista dos requisitos mínimos de software e hardware e um readme.txt com informações sobre o exemplo, a execução, a versão do Quartus compatível, dependendo da complexidade há também recomendações de paramentos de otimização para o exemplos.

  

I.  Realizando Síntese do arquivo .cl

  1. Baixar algum dos exemplos disponíveis no site da Altera para OpenCL [http://www.altera.com/support/examples/opencl/opencl.html]
  2. O arquivo compactado deve ser extraído nele existem duas pastas uma “commom”e uma com o nome do exemplo que você baixou, como por exemplo “vector_add”
  3. Você deve executar a síntese do arquivo .cl usando o AOC através do comando básico:
      aoc
    nome_do_arquivo.cl                             

--board <modelo da placa> : seleciona um dispositivo específico, caso só exista um instalado não é necessário especificar o hardware. Ex --board pcie385n_a7
--list-boards : printa uma lista de placas disponíveis

Comandos de otimização:
Dependendo da aplicação a ser executada e das suas prioridades você pode querer usar um ou mais parâmetros de otimização disponíveis:

-fp-relaxed=true : Relaxa a ordem dos operadores aritmética de ponto flutuante. O programa deve ser capaz de tolerar pequenas diferenças nos resultados de ponto flutuante.

-fpc=true : Direciona o AOC para remover operações de arredondamento intermediário de ponto ftlutuante e conversões sempre que possível.

--sw-dimm-partition : Configura a memória global como espaços de endereços separados. Depois de configurar a memória global, alocar cada buffer em um banco ou
outro cl_mem_flags Altera-específico (por exemplo, CL_MEM_BANK_2_ALTERA).

--const-cache-bytes <N> : Configura o tamanho do cache constante em bytes, arredondados para o próximo da base dois. Não haverá nenhum efeito se nenhum dos kernels usa o espaço de endereço __constant. O tamanho do cache constante padrão é de 16 kilobytes (KB). Por exemplo, para configurar um cache de 32 kB, digite o comando aoc --const--cache bytes 32768 myKernel.cl

-O3 : Direciona recursos de otimização de desempenho para melhoramento, estimativa lógica utilizada é menor ou igual a 85%.

--util <N> : Ultrapassa o limite de utilização lógica usada pelo opção -O3 com <N>%.


Arquivos gerados
·         Arquivos de log: uso de recursos estimados, rendimento estimado (se habilitado), e compila mensagens;
·         Arquivos do Quartus: cria arquivos de origem, relatório do tempo etc.
Para rever o resumo de utilização de recursos estimados na tela, compilar o kernel, incluindo o --report em seu comando aoc. Alternativamente, rever o uso da área real relatado pelo software Quartus® no arquivo:
<o_nome_do_seu_kernel>/acl_quartus_report.txt.





   II.            Transferência de Síntese para a Placa FPGA
         Ao realizar a síntese com o compilador AOC será gerado um arquivo .aocx e  .aoco
Kernels são compilados off-line usando o Altera offline Compiler (AOC)
           O kernel é primeiramente traduzido pela primeira vez em um arquivo objeto AOC (.aoco) que representa o sistema de hardware FPGA;
                 O arquivo .aoco é usado para gerar o arquivo executável AOC (.aocx), usado para programar o FPGA.

Deve ser feita a transferência da síntese para o dispositivo FPGA através do comando aocl
aocl flash arquivo.aocx

*flash faz a transferência do código compilado pra memória flash da FPGA

Outros parâmetros do aocl:
aocl diagnostic:  testa e gera diagnóstico da sua placa FPGA, por segurança extra você pode executar o comando antes de realizar a transferência de síntese com o aocl



Referências:
http://www.altera.com/literature/hb/opencl-sdk/aocl_programming_guide.pdf
http://www.altera.com/literature/hb/opencl-sdk/aocl_optimization_guide.pdf

Nenhum comentário:

Postar um comentário