A saída FPGA pode executar um PC com vários núcleos?


20

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.


11
Você já pensou em executar o algoritmo em uma CPU de desktop (ou servidor)? Esses são tipicamente mais rápidos que as CPUs de laptop. (Por um fator constante, mas ainda mais rápido.)
ntoskrnl

11
Pense em usar GPU para processamento de rede neural. As GPUs têm muitas unidades que podem multiplicar números de ponto flutuante em paralelo.
27514 Kamil

@ntoskrnl Suponho que ele tenha i5 ou melhor cpu (4 núcleos), portanto o desempenho no desktop ou no servidor será apenas promocional para a velocidade do relógio. Talvez no Xeon ele possa obter pouco desempenho (20%?) Graças ao enorme cache e à melhor largura de banda da memória, mas isso não é muito.
27514 Kamil

Qual CPU você tem?
28914 Kamil

Timing interessante de perguntas, temos uma pergunta semelhante sobre engenharia de rede.SE #
Mike Pennington

Respostas:


23

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.


3
Para decidir se a DRAM é o limite, você também deve saber que os FPGAs têm muitas pequenas RAMs distribuídas (por exemplo, blocos de 500 RAM independentes de 9kbit) que podem ler / gravar durante o mesmo ciclo de clock.
Max28

19

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.


Na verdade, o desenvolvimento de FPGA geralmente é feito usando linguagens como Verilog ou VHDL, que descrevem comportamento em vez de implementação - um fato que às vezes é útil, mas às vezes pode complicar bastante o design da lógica seqüencial assíncrona. Se alguém especificasse implementações, os atrasos de propagação seriam um pouco consistentes, mas nas linguagens comportamentais eles nem são garantidos como positivos . O principal no design do FPGA é que os idiomas facilitam muito o fato de muitas (potencialmente centenas ou milhares) de diferentes partes do chip executarem comportamentos simples simultaneamente.
Supercat 29/11

13

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.


GPGPU é uma ótima entrada para redes neurais usando!
Botnic

Existem também ASICs de redes neurais. A Intel costumava fazer um que implementasse 16 neurônios nos anos 80.
Lior Bilia #

@LiorBilia bem, eu não sei nada sobre eles :). Nunca trabalhei com redes neurais e muito pouco com FPGA
clabacchio

A rede neural do @clabacchio Software é um programa que mais se multiplica e compara operações em números de ponto flutuante. Principalmente, quero dizer ... 95% ou mais.
27514 Kamil

Uma CPU convencional pode fazer um bom trabalho ao somar muitos números de 8 bits; em uma máquina rápida, o tempo de execução seria dominado pelo custo de buscar dados da memória (99% das buscas de código viriam da captura). Um exemplo mais interessante seria trabalhar com dados codificados usando um esquema que requer arranjos ou permutações de bits "incomuns". Por exemplo, se um dado de amostragem de vídeo retornar entrelaça bits para vermelho, verde e azul, um FPGA pode facilmente reorganizar os bits; uma CPU convencional teria muito mais problemas.
Supercat

6

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.

  • CPU core i7: 0,8-1,5 M hash / s
  • FPGA: 5-300M hash / s
  • ASIC: 12000M hash / s por um chip minúsculo, 2000000M (sim, esse 2T) hash / s para um dispositivo de 160 chips

É 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.


Hashing é um caso muito especial; observe que as moedas baseadas em criptografia (deliberadamente) não são muito aceleráveis ​​por hardware especializado.
Pjc50

11
A depuração do ASIC é normalmente tratada em simulação antes do envio para a fabricação. Portanto, geralmente são 6 meses ou mais, desde as especificações até a fabricação. Diagnosticar bugs após a fabricação é ... caro, mas não impossível.
Pjc50

E, embora seja difícil, de fato pode ser muito, muito difícil, existem coisas como varredura de limites, teste JTAG e técnicas diretas usando FIB etc. Portanto, está longe de ser impossível depurá-las, você só precisa saber o que está fazendo . Hoje em dia, o ASIC se refere mais a um fluxo de design (HDL, Síntese, P&R) que ele realmente se refere a um dispositivo real, já que a maioria dos dispositivos é ASIC, incluindo processadores ARM.
placeholder

@ pjc50 Sim, esse era o meu ponto - em casos especiais, a diferença de velocidade é tremenda. Mas o scrypt asics ainda possui CPUs e GPUs. Não por um fator de um milhão (como no sha), mas ainda bem acima de 100. #
Agent_L 28/11

@ placeholder sim, mas mesmo se você encontrar o bug, não é muito útil para todos os chips já fabricados. Eu quis dizer "depuração", como em "remover o bug" e não apenas "aqui está".
Agent_L 28/11

5

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.

  1. 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

  2. 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).


11
O problema aqui é definir o desempenho. Se queremos dizer mais rápido, então sim, o fpga pode ser mais rápido que o cpus normal. No entanto, o fpga não é tão flexível quanto a CPU; eles são projetados para executar eficientemente apenas uma tarefa predefinida. Executar outra tarefa significaria mudar a sua fiação interna realmente implementar outro FPGA
Gianluca Ghettini
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.