Não entendo como o FPGA pode ser usado para acelerar um algoritmo. Atualmente, estou executando um algoritmo demorado em tempo real em um laptop quadcore para que quatro cálculos possam ser feitos em paralelo.
Recentemente, fui alertado de que o FPGA pode ter um desempenho ainda melhor. Eu não entendo como isso funciona. Alguém pode explicar como o FPGA acelera um algoritmo e se devo mudar para uma solução FPil Xilinx ou Altera ou continuar executando os cálculos no meu laptop quadcore.
Detalhes adicionais: O algoritmo executa 20 redes neurais artificiais usando entradas alimentadas pela transformação de pacotes wavelet
Obrigado a todos pelas ótimas respostas.
Respostas:
Um colega meu aferido isso e chegou à conclusão de que FPGAs iria superar um PC, uma vez que tinha mais do que cerca de 100 independentes , inteiros tarefas que caberiam no FPGA. Para tarefas de ponto flutuante, o GPGPU venceu o FPGA por toda parte. Para operações multithreading ou SIMD estreitas, as CPUs são extremamente otimizadas e executam em uma velocidade de clock mais alta do que os FPGAs normalmente conseguem.
As outras ressalvas: as tarefas devem ser independentes. Se houver dependências de dados entre tarefas, isso limita o caminho crítico da computação. Os FPGAs são bons para avaliação booleana e matemática de números inteiros, bem como interfaces de baixa latência de hardware, mas não para cargas de trabalho dependentes de memória ou ponto flutuante.
Se você precisar manter a carga de trabalho na DRAM, esse será o gargalo e não o processador.
fonte
Um FPGA funciona completamente diferente de um processador.
Para um processador, você escreve um software que diz ao hardware o que fazer. Em um FPGA, você descreve "como deve ser o hardware" internamente. É como se você estivesse criando um chip feito especialmente para o seu algoritmo.
Isso acelera muitas coisas e pode reduzir o consumo de energia. Mas tem suas desvantagens: o desenvolvimento leva muito mais tempo e é muito mais complicado. Você precisa pensar de uma maneira completamente diferente e não pode usar algoritmos que funcionam no software de maneira direta.
Para redes neurais artificiais, o FPGA é uma ótima opção. Há muitas pesquisas em andamento nessa área.
fonte
Depende muito do algoritmo, mas o princípio pode ser explicado de maneira bastante simples.
Suponha que seu algoritmo tenha que somar muitos números de 8 bits. Sua CPU ainda precisará buscar cada instrução, obter os operandos da RAM ou da memória cache, executar a soma, armazenar o resultado no cache e continuar com a próxima operação. O pipeline ajuda, mas você pode executar apenas tantas operações simultâneas quanto os núcleos que você possui.
Se você usa um FPGA, pode implementar um grande número de somadores simples que funcionam em paralelo, processando talvez milhares de somas em paralelo. Embora uma única operação possa levar mais tempo, você tem um enorme grau de paralelismo.
Você também pode usar uma GPGPU para executar tarefas semelhantes, pois elas também são feitas de muitos núcleos mais simples.
fonte
Existem aproximadamente três níveis de especialização em equipamentos de computação:
A CPU (como no seu laptop) é a mais genérica de todas. Pode fazer tudo, mas essa versatilidade tem um preço de velocidade lenta e alto consumo de energia. A CPU está programada em movimento, as instruções vêm da RAM. Os programas para CPU são rápidos, baratos, fáceis de escrever e muito fáceis de alterar.
FPGA (que significa matriz de portas programável em campo) é a camada intermediária. Como o próprio nome indica, pode ser programado "no campo", fora da fábrica. O FPGA geralmente é programado uma vez, esse processo pode ser descrito como a configuração de sua estrutura interna. Após esse processo, ele se comporta como um pequeno computador especializado para a única tarefa que você escolheu para ele. É por isso que ele pode se sair melhor que a CPU genérica. Programar FPGA é muito difícil e caro, e depurá-los é muito difícil.
O ASIC (que significa circuito integrado específico da aplicação) é o melhor especialista. É um chip projetado e produzido para uma e apenas uma tarefa - uma tarefa extremamente rápida e eficiente. Não há possibilidade de reprogramar o ASIC, ele sai da fábrica totalmente definido e é inútil quando seu trabalho não é mais necessário. Projetar ASIC é algo que apenas as grandes empresas podem pagar e depurá-las é bem, praticamente impossível.
Se você pensa em "núcleos", olhe da seguinte maneira: as CPUs têm 4, 6, talvez 8 grandes núcleos que podem fazer tudo. O ASICS geralmente possui milhares de núcleos, mas muito pequenos, capazes de apenas uma coisa.
Você pode olhar para a comunidade de mineração de bitcoin. Eles usam hashes SHA256.
É claro que esses bebês ASIC custam quase US $ 2.000 quando produzidos em massa, mas isso lhe dá uma idéia de como um pau-duro-de-tesouro pode enfrentar um especialista.
A única pergunta é: o FPGA pode oferecer mais economia do que o custo do projeto? Obviamente, em vez de executá-lo em UM laptop, você pode tentar executá-lo em 20 PCS.
fonte
Sim, o FPGA pode superar a CPU moderna (como o Intel i7) em algumas tarefas específicas, mas existem métodos mais fáceis e baratos para melhorar o desempenho da rede neural.
Por mais barato - quero dizer esforço total, não o custo do FPGA IC, mas também a memória muito rápida para o FPGA (você precisaria para a rede neural) e todo o processo de desenvolvimento.
Use SSE - eu já vi implementações de redes neurais bastante simples, com desempenho 2-3x melhor. Pode ser uma boa ideia se você não tiver uma GPU dedicada em seu laptop.
Melhorando a velocidade das redes neurais em CPUs por Vincent Vanhoucke e Andrew Senior
Use GPGPU (computação de uso geral em unidades de processamento gráfico) - acho que você pode obter um aumento de desempenho de 100 a 200x em GPUs para laptops de classe média como a GeForce 730M.
Aqui está a implementação de rede neural (e código livre). Ele usa a Nvidia CUDA.
A abordagem da GPGPU é muito escalável, se em algum momento você perceber que precisa de mais poder de computação - você pode simplesmente usar um computador de mesa com uma GPU mais poderosa ou até a Nvidia Tesla K80 com 4992 núcleos (isso é caro).
fonte