FPGA peut-il exécuter un PC multicœur?

20

Je ne comprends pas comment FPGA peut être utilisé pour accélérer un algorithme. Actuellement, je lance un algorithme en temps réel qui prend du temps sur un ordinateur portable quadcore afin que quatre calculs puissent être effectués en parallèle.

J'ai récemment été averti que le FPGA pouvait offrir des performances encore meilleures. Je ne comprends pas comment cela fonctionne. Quelqu'un peut-il expliquer comment FPGA accélère un algorithme et si je dois passer à une solution FPGA Xilinx ou Altera ou continuer à effectuer les calculs sur mon ordinateur portable quadcore.

Détails supplémentaires: l'algorithme exécute 20 réseaux de neurones artificiels à l'aide d'entrées alimentées par la transformation de paquets d'ondelettes

Merci à tous pour les bonnes réponses.

Carlos - la mangouste - Danger
la source
1
Avez-vous envisagé d'exécuter l'algorithme sur un processeur de bureau (ou serveur)? Ceux-ci sont généralement plus rapides que les processeurs portables. (Par un facteur constant, mais toujours plus rapide.)
ntoskrnl
1
Pensez à utiliser le GPU pour le traitement du réseau neuronal. Les GPU ont de nombreuses unités qui peuvent multiplier des nombres à virgule flottante en parallèle.
Kamil
@ntoskrnl Je suppose qu'il a un processeur i5 ou supérieur (4 cœurs), donc les performances sur le bureau ou le serveur seront juste favorables à la vitesse d'horloge. Peut-être que sur Xeon, il peut gagner peu (20%?) De performances grâce à un énorme cache et une meilleure bande passante mémoire, mais ce n'est pas beaucoup.
Kamil
Quel processeur avez-vous?
Kamil
Moment intéressant des questions, nous avons reçu une question similaire sur l'ingénierie de réseau.
Mike Pennington

Réponses:

23

Un de mes collègues a évalué cela et est arrivé à la conclusion que les FPGA surclasseraient un PC une fois que vous auriez plus d'une centaine d' indépendants , entiers tâches qui cadrerait dans le FPGA. Pour les tâches en virgule flottante, GPGPU a battu FPGA partout. Pour un fonctionnement multithreading étroit ou SIMD, les processeurs sont extrêmement optimisés et fonctionnent à une vitesse d'horloge supérieure à celle des FPGA.

Les autres mises en garde: les tâches doivent être indépendantes. S'il existe des dépendances de données entre les tâches, cela limite le chemin critique du calcul. Les FPGA sont bons pour l'évaluation booléenne et les mathématiques entières, ainsi que pour les interfaces matérielles à faible latence, mais pas pour les charges de travail dépendant de la mémoire ou les virgules flottantes.

Si vous devez conserver la charge de travail dans la DRAM, ce sera le goulot d'étranglement plutôt que le processeur.

pjc50
la source
3
Pour décider si la DRAM est la limite, vous devez également savoir que les FPGA ont de nombreuses petites RAM distribuées (par exemple 500 blocs de RAM indépendants de 9 kbit) qui peuvent toutes lire / écrire pendant le même cycle d'horloge.
maxy
19

Un FPGA fonctionne complètement différemment d'un processeur.

Pour un processeur, vous écrivez un logiciel qui indique au matériel quoi faire. Sur un FPGA, vous décrivez "à quoi devrait ressembler le matériel" en interne. C'est comme si vous fabriquiez une puce spécialement conçue pour votre algorithme.

Cela accélère beaucoup de choses et peut réduire la consommation d'énergie. Mais il a ses inconvénients: le développement prend beaucoup plus de temps et est beaucoup plus compliqué. Vous devez penser d'une manière complètement différente et ne pouvez pas utiliser des algorithmes qui fonctionnent dans un logiciel de manière simple.

Pour les réseaux de neurones artificiels, le FPGA est un excellent choix. Il y a beaucoup de recherches en cours dans ce domaine.

Botnic
la source
En fait, le développement FPGA se fait souvent en utilisant des langages comme Verilog ou VHDL qui décrivent le comportement plutôt que l'implémentation - un fait qui est parfois utile mais peut parfois compliquer considérablement la conception de la logique séquentielle asynchrone. Si l'on spécifiait des implémentations, les délais de propagation seraient quelque peu cohérents, mais dans les langages comportementaux, ils ne sont même pas garantis positifs . L'essentiel avec la conception FPGA est que les langages permettent très facilement à plusieurs (potentiellement des centaines ou des milliers) de parties différentes de la puce d'effectuer simultanément des comportements simples.
supercat
13

Cela dépend beaucoup de l'algorithme, mais le principe peut être expliqué très simplement.

Supposons que votre algorithme doit additionner un grand nombre de nombres à 8 bits. Votre CPU devra toujours récupérer chaque instruction, obtenir les opérandes de la RAM ou de la mémoire cache, exécuter la somme, stocker le résultat dans le cache et poursuivre l'opération suivante. Le pipeline aide, mais vous ne pouvez exécuter que autant d'opérations simultanées que les cœurs dont vous disposez.

Si vous utilisez un FPGA, vous pouvez implémenter un grand nombre d'additionneurs simples qui fonctionnent en parallèle, réalisant peut-être des milliers de sommes en parallèle. Bien qu'une seule opération puisse prendre plus de temps, vous avez un degré de parallélisme énorme.

Vous pouvez également utiliser un GPGPU pour effectuer des tâches similaires, car ils sont également constitués de nombreux cœurs plus simples.

clabacchio
la source
GPGPU est une excellente entrée pour les réseaux de neurones utilisant!
Botnic
Il existe également des ASIC de réseau neuronal. Intel en fabriquait un qui implémentait 16 neurones dans les années 80.
Lior Bilia
@LiorBilia et je ne sais rien d'eux :). Je n'ai jamais travaillé avec des réseaux de neurones, et très peu avec FPGA
clabacchio
@clabacchio Software neural network est un programme qui multiplie et compare principalement les opérations sur les nombres à virgule flottante. Par la plupart du temps, je veux dire ... 95% ou plus.
Kamil
Un processeur conventionnel peut faire un assez bon travail en additionnant de nombreux nombres de 8 bits; sur une machine rapide, le temps d'exécution serait dominé par le coût de la récupération des données de la mémoire (99% des récupérations de code proviendraient du catch). Un exemple plus intéressant serait de travailler avec des données codées en utilisant un schéma qui nécessite des dispositions ou des permutations de bits plutôt "inhabituelles". Par exemple, si un morceau de données d'échantillonnage vidéo renvoie des bits entrelacés pour le rouge, le vert et le bleu, un FPGA pourrait facilement réorganiser les bits; un CPU conventionnel aurait bien plus de mal.
supercat
6

Il existe environ 3 niveaux de spécialisation des équipements informatiques:

Le CPU (comme dans votre ordinateur portable) est le plus générique de tous. Il peut tout faire, mais cette polyvalence a un prix à faible vitesse et à forte consommation d'énergie. Le CPU est programmé en déplacement, les instructions proviennent de la RAM. Les programmes pour CPU sont rapides, bon marché et faciles à écrire et très faciles à changer.

FPGA (qui signifie matrice de porte programmable sur site) est le niveau intermédiaire. Comme son nom l'indique, il peut être programmé "sur le terrain", c'est-à-dire en dehors d'une usine. Le FPGA est généralement programmé une fois, ce processus peut être décrit comme la configuration de sa structure interne. Après ce processus, il se comporte comme un petit ordinateur spécialisé pour la tâche que vous avez choisie. C'est pourquoi il peut faire mieux que le CPU générique. La programmation de FPGA est très difficile et coûteuse et leur débogage est très difficile.

ASIC (qui signifie Circuit spécifique à l'application) est le spécialiste ultime. C'est une puce conçue et produite pour une et une seule tâche - une tâche qu'elle accomplit extrêmement rapidement et efficacement. Il n'y a aucune possibilité de reprogrammer l'ASIC, il quitte l'usine entièrement défini et est inutile lorsque son travail n'est plus nécessaire. La conception d'ASIC est quelque chose que seules les grandes entreprises peuvent se permettre et leur débogage est bien, pratiquement impossible.

Si vous pensez aux «cœurs», regardez-le de cette façon: les processeurs ont 4, 6, peut-être 8 gros cœurs qui peuvent tout faire. Les ASICS ont souvent des milliers de cœurs, mais très petits, capables d'une seule chose.

Vous pouvez regarder la communauté minière Bitcoin. Ils font des hachages SHA256.

  • Processeur Core i7: 0,8-1,5 M de hachage / s
  • FPGA: 5-300 M de hachage / s
  • ASIC: 12 000 M de hachage / s par une toute petite puce, 200 000 M (oui, ce 2T) de hachage / s pour un périphérique à 160 puces

Bien sûr, ces bébés ASIC coûtent près de 2000 $ lorsqu'ils sont produits en masse, mais cela vous donne une idée de la façon dont un cric de tous les métiers peut faire face à un spécialiste.

La seule question est: le FPGA peut-il vous apporter plus d'économies que ce que coûterait sa conception? Bien sûr, au lieu de l'exécuter sur UN ordinateur portable, vous pouvez essayer de l'exécuter sur 20 PCS.

Agent_L
la source
Le hachage est cependant un cas très spécial; notez que les pièces de monnaie cryptées ne sont (délibérément) pas très accélérables par du matériel spécialisé.
pjc50
1
Le débogage & ASIC est généralement géré par simulation avant l'expédition à la fabrication. Il faut donc généralement 6 mois ou plus entre les spécifications et la fabrication. Le diagnostic des bugs après la fabrication est .. cher mais pas impossible.
pjc50
Et même si c'est difficile, en fait cela peut être très très difficile, il y a des choses comme le scan des limites, le test JTAG et les techniques directes utilisant FIB etc. Il est donc loin d'être impossible de les déboguer, il vous suffit de savoir ce que vous faites . Aujourd'hui, l'ASIC se réfère plus à un flux de conception (HDL, Synthesis, P&R) qu'il se réfère en fait à un périphérique réel, car la plupart des appareils sont des ASIC, y compris des processeurs ARM.
espace réservé
@ pjc50 Oui, c'était mon point - dans des cas spéciaux, la différence de vitesse est énorme. Mais scryper les asics pwn encore les CPU et les GPU. Pas d'un facteur un million (comme avec sha), mais toujours bien au-dessus de 100.
Agent_L
@placeholder oui, mais même si vous trouvez le bug, il n'est pas très utile pour toutes ces puces déjà fabriquées. Je voulais dire "déboguer" comme dans "supprimer le bug" et pas seulement "le voici".
Agent_L
5

Oui, le FPGA peut surpasser le processeur moderne (comme Intel i7) dans certaines tâches spécifiques, mais il existe des méthodes plus faciles et moins chères pour améliorer les performances du réseau neuronal.

Par moins cher - je veux dire l'effort total, pas le coût du CI FPGA, mais aussi la mémoire très rapide pour FPGA (vous en auriez besoin pour le réseau neuronal) et tout le processus de développement.

  1. Utilisez SSE - J'ai vu des implémentations de réseaux de neurones assez simples avec des performances 2 à 3 fois supérieures. Cela pourrait être une bonne idée si vous n'avez pas de GPU dédié dans votre ordinateur portable.

    Amélioration de la vitesse des réseaux de neurones sur les processeurs par Vincent Vanhoucke et Andrew Senior

  2. Utilisez GPGPU (informatique à usage général sur les unités de traitement graphique) - Je pense que vous pouvez améliorer les performances de 100 à 200x sur un GPU pour ordinateur portable de classe moyenne comme GeForce 730M.

    Voici l'implémentation du réseau neuronal (et le code gratuit). Il utilise Nvidia CUDA.

    L'approche GPGPU est très évolutive, si à un certain point vous réalisez que vous avez besoin de plus de puissance de calcul - vous pouvez simplement utiliser un ordinateur de bureau avec un GPU plus puissant ou même Nvidia Tesla K80 avec 4992 cœurs (c'est cher).

Kamil
la source
1
Le problème ici est de définir les performances. Si nous voulons dire plus rapide, alors oui, le fpga peut être plus rapide que les processeurs normaux. Cependant, les fpga ne sont pas aussi flexibles que le CPU, ils sont conçus pour exécuter efficacement juste une tâche prédéfinie. Exécuter une autre tâche signifierait changer son câblage interne en implémentant réellement un autre FPGA
Gianluca Ghettini