Este benchmark demonstra uma implementação do OpenCL™ de uma transformação fourier 1D rápida (FFT 1D) na Intel® FPGAs. O benchmark pode processar até 16 milhões de valores complexos de ponto flutuante de precisão única e suporta a mudança dinâmica do tamanho dos dados.
O algoritmo usado para processar conjuntos de dados tão grandes tem seis estágios. Por exemplo, assuma que queremos processar 1 milhão de pontos:
- Tratando os pontos de 1M como matriz 1K x 1K, leia-o a partir da memória externa e transpondo-o em tempo real.
- Execute o FFT 1K 1D em todas as linhas (da matriz transposta).
- Multiplique os valores resultantes por fatores de ajuste.
- Transpor a matriz e gravar em buffer temporário na memória externa.
- Execute a FFT 1K 1D em todas as linhas.
- Transpor a matriz e a saída de gravação para a memória externa.
Todo o sistema consiste em três kernels conectados por canais. O conjunto de três kernels é solicitado duas vezes pelo host para fazer a computação completa. A primeira enquete executa as etapas 1-4 acima, a segunda enquete executa as etapas 5-6. Este é essencialmente um núcleo FFT 2D com transposição extra e multiplicação de twiddle.
O código é facilmente parametrizado para suportar diferentes tamanhos de FFT, bem como requisitos de desempenho diferentes.
Desempenho FFT
O desempenho do núcleo depende do número de pontos processados em paralelo, do layout dos dados usados e do número e da velocidade da memória externa. As medições abaixo foram feitas no BittWare S5-PCIe-HQ D8 com dois DDR3-1600s. As medições foram feitas em FFT de 1 M de ponto para 8 pontos em paralelo e FFT de 4 M para 4 pontos em paralelo.
Pontos processados em paralelo | Layout de dados de entrada/saída Natural |
Layout de dados de entrada/saída Otimizado |
---|---|---|
4 | 117 MSPS | 217 MSPS |
8 | 292 MSPS | 457 MSPS |
MSPS é "milhões de amostras por segundo".
Características
- Kernels de item de trabalho único
- Canais do kernel
- Transposição de matriz otimizada
Downloads
O exemplo de projeto fornece código fonte para o dispositivo OpenCL (.cl), bem como para o aplicativo host. Para compilar o aplicativo host, o pacote Linux* inclui um makefile e o pacote do Windows inclui um projeto do Microsoft Visual Studio 2010.
Os seguintes downloads são fornecidos para este exemplo:
O uso deste design é regido pelos termos e condições do contrato de licença de design de referência de hardware.
Requisitos de software e hardware
Este exemplo de projeto requer as seguintes ferramentas:
- Intel® FPGA software v17.1 ou mais recente
- Intel FPGA SDK para OpenCL v17.1 ou mais recente
- No Linux: GNU Make e gcc
- No Windows: Microsoft Visual Studio 2010
Para baixar as ferramentas de design da Intel, acesse a página de downloads do OpenCL. Apenas o sistema operacional Linux é suportado por este exemplo de projeto
OpenCL e o logotipo OpenCL são marcas comerciais da Apple Inc. usadas com permissão pela Khronos.
* O produto é baseado em uma especificação Khronos publicada e passou no Processo de teste de conformidade Khronos. O status de conformidade atual pode ser encontrado em www.khronos.org/conformance.