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.
Réponses:
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.
la source
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.
la source
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.
la source
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.
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.
la source
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.
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
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).
la source