O site da Altera possui vários exemplos que demonstram como descrever aplicações em OpenCL, juntamente com as respectivas aplicações de host, que você pode compilar e executar em um host com uma placa FPGA com suporte ao SDK deles.
Cada exemplo está disponível em duas versões uma para Linux (‘.tar.gz’) e outra para Windows (‘.zip’). Também é disponibilizado uma lista de requisitos mínimos de software e hardware e um arquivo ‘readme.txt’ com informações importantes sobre o exemplo. Dentre as informações importantes, destacamos a versão do Quartus II compatível e recomendações de parâmetros de otimização.
- Realizando a síntese do arquivo ‘.cl’:
- baixar algum dos exemplos disponíveis no site da Altera para OpenCL;
- extrair o arquivo compactado. Nele existem duas pastas uma ‘common’ e uma com o nome do exemplo que você baixou, como por exemplo: ‘vector_add’;
- você deve executar a síntese do arquivo ‘.cl’ usando o compilador OpenCL da Altera através do comando básico:
aoc nome_do_arquivo.cl
- o comando ‘aoc’ possui os seguintes parâmetros de execução:
- –board : seleciona um dispositivo específico, caso só exista apenas um instalado não é necessário especificar o hardware. Exemplo: –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éticos 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 flutuante e conversões sempre que possível.
- –sw-dimm-partition : configura a memória global com 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 : 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 : ultrapassa o limite de utilização lógica usada pelo opção -O3 com %.
- 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 reportado pelo Quartus® no arquivo: /acl_quartus_report.txt.
- 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’. Os 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
obs: o parâmetro ‘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
- outros parâmetros do aocl:
Referências: