MAC0499 - Trabalho de Conclusão de Curso


Avaliação de desempenho de algoritmos implementados em FPGA via síntese de alto nível

Aluno: João Henrique Luciano Orientador: Alfredo Goldman


Introdução

A comunidade de desenvolvedores de hardware exibe, hoje, um grande interesse e necessidade de ferramentas que facilitem a implementação de algoritmos e funções em hardware. Nessa situação, junto da evolução de tecnologias como as placas FPGAs, temos o progresso da síntese de alto nível, que permite a tradução de algoritmos para circuitos lógicos. Logo, seria interessante um estudo sobre a síntese de alto nível voltada para FPGAs, implementando algoritmos tanto para FPGAs, utilizando ferramentas de síntese de alto nível como os arcabouços OpenCL e LegUp, quanto para computadores multicore. Além disso, é importante avaliar o quão vantajoso seria implementar tais algoritmos em FPGAs em termos de desempenho, fazendo-se necessário, então, o benchmarking e posterior avaliação de desempenho dos algoritmos implementados nas diferentes arquiteturas.

Motivação

A melhoria da produtividade e manutenibilidade de projetos são desejáveis desde os primórdios do desenvolvimento de software e hardware. Na área de software, temos a evolução do uso direto da linguagem binária, familiar às máquinas, para as linguagens de programação interpretadas. Já em hardware, houve o desenvolvimento de arquiteturas de hardwares diferentes, tais como multicore, GPUs e, mais recentemente, FPGAs, cada uma introduzindo vantagens às arquiteturas tradicionais dos computadores single core. Além disso, temos o avanço da confecção e teste manuais de circuitos lógicos, até chegarmos na técnica atual da síntese de alto nível.

A síntese de alto nível é um processo que converte uma descrição comportamental - ou algorítmica - de um hardware para uma arquitetura de circuitos lógicos que implementa o algoritmo descrito. Desta forma, pode-se abstrair parte substancial do processo de design de hardwares, permitindo o reuso de código para diferentes arquiteturas.

Há, portanto, um grande interesse pela comunidade no avanço da síntese de alto nível, permitindo programar algoritmos em hardware de forma portável, produtiva, sem levar em consideração todas os detalhes inerentes a cada modelo arquitetural. Considera-se também, neste contexto, a exploração de tecnologias como FPGAs, dispositivos lógicos cujos circuitos são reprogramáveis após sua fabricação e que prometem reduzir o custo e tempo, além de aumentar a produtividade e manutenibilidade, do desenvolvimento de hardware.

Objetivos

Os objetivos deste trabalho são estudar a fundo as arquiteturas multicore e FPGA, bem como o processo de síntese de alto nível e de desenvolvimento de algoritmos para FPGAs. Além disso, serão feitas avaliações de desempenho dos algoritmos desenvolvidos para comparar as diferenças nas arquiteturas mencionadas; os resultados serão utilizados para criar uma comparação objetiva entre as arquiteturas.

Etapas do projeto

As atividades realizadas no projeto podem ocorrer de forma paralela, e a cada atividade serão feitas anotações de seus resultados, como conhecimentos adquiridos e resultados de experimentos. Os principais passos serão:

  1. Estudo sobre benchmarking e análise de desempenho
  2. Estudo sobre arquiteturas de máquinas multicore e de FPGAs.
  3. Estudo sobre o processo e ferramentas de síntese de alto nível
  4. Estudo sobre algoritmos, suas implementações nas arquiteturas estudadas, e suas restrições
  5. Implementação dos algoritmos em cada uma das arquiteturas estudadas
  6. Benchmarking dos algoritmos implementados
  7. Análise de desempenho dos algoritmos e síntese dos resultados experimentais e teóricos adquiridos

Cronograma