Jai entendu parler de personnes utilisant des FPGA pour améliorer les performances de systèmes qui font des choses comme lextraction de pièces de monnaie, le commerce électronique et le repliement des protéines.
Comment un FPGA peut-il rivaliser avec un processeur en termes de performances alors que le processeur fonctionne généralement au moins un ordre de grandeur plus rapide (en termes de vitesse dhorloge)?
Commentaires
- Le FPGA fait tout en même temps.
Réponse
CPU « s sont des dispositifs de traitement séquentiel. Ils divisent un algorithme en une séquence dopérations et les exécutent une par une.
Les FPGA sont (ou peuvent être configurés comme) des dispositifs de traitement parallèles. Un algorithme entier peut être exécuté en un seul tick de lhorloge, ou, dans le pire des cas, beaucoup moins de ticks dhorloge quil nen faut à un processeur séquentiel. L’un des coûts de la complexité logique accrue est généralement une limite inférieure à laquelle le périphérique peut être synchronisé.
Compte tenu de ce qui précède, les FPGA peuvent surpasser les processeurs effectuant certaines tâches car ils peuvent le faire. la même tâche en moins de tics dhorloge, mais à une fréquence dhorloge globale plus faible. Les gains qui peuvent être obtenus dépendent fortement de lalgorithme, mais au moins un ordre de grandeur nest pas atypique pour quelque chose comme une FFT.
De plus, parce que vous pouvez construire plusieurs unités dexécution parallèles dans un FPGA, si vous avez un grand volume de données que vous souhaitez faire passer par le même algorithme, vous pouvez distribuer les données sur les unités dexécution parallèles et obtenir un débit supérieur de plusieurs ordres de grandeur à celui qui peut être atteint même avec un processeur multicœur.
Le prix que vous payez pour les avantages est la consommation dénergie et $$$ « s.
Commentaires
- +1; FPGA cependant ne sont pas aussi dynamiques que les processeurs, cest pourquoi les processeurs sont généralement mieux adaptés aux PC
- » Le prix que vous payez pour ces avantages est la consommation dénergie et $$$ ‘ s. » – Cest souvent vrai, mais vous pouvez carrément battre une machine Intel Xeon multi-haut de gamme à 1000 $ avec un bas de gamme 50 $ Xilinx Spartan-6 pour de nombreux algorithmes. Mais cela prend généralement beaucoup de temps dingénierie et vous pouvez vous retrouver avec une conception très personnalisée qui ne fonctionne que pour une seule application et qui est difficile à modifier. Le compromis nest donc pas seulement la puissance et largent, mais le temps de développement de lalgorithme, la réutilisabilité et la flexibilité. (Bien que vous puissiez discuter temps == argent.)
- markt, à propos de votre dernière phrase, les FPGA ‘ t sont-ils beaucoup moins puissants que les CPU? Il existe une large gamme de périphériques pour les processeurs et les FPGA, mais si nous regardons ceux qui sont utilisés pour des choses comme lextraction de pièces de monnaie, ‘ t les processeurs utilisés pour ces tâches beaucoup plus gourmandes en énergie que les FPGA qui seraient utilisés?
- @David: Quand on parle de Bitcoin mining, la métrique pertinente est le nombre de hachages par watt. Markt parle de la consommation dénergie globale. Autrement dit, un FPGA donné peut consommer 3 fois la puissance dun processeur typique, mais être beaucoup plus de 3 fois plus rapide à lextraction de Bitcoin; donc pour Bitcoin que ‘ est gagnant.
- @Billy: le nombre de hachages par watt · seconde, pas par watt.
Réponse
Markt a cela en grande partie raison, mais je vais ajouter mon 2 cents ici:
Imaginez que je vous ai dit que je voulais écrire un programme qui inversait lordre des bits à lintérieur dun entier de 32 bits. Quelque chose comme ceci:
int reverseBits(int input) { output = 0; for(int i = 0;i < 32;i++) { // Check if the lowest bit is set if(input & 1 != 0) { output = output | 1; // set the lowest bit to match in the output! } input = input >> 1; output = output << 1; } return output; }
Maintenant, mon implémentation nest pas élégante, mais je suis sûr que vous êtes daccord pour dire quil y aurait un certain nombre dopérations impliquées pour faire cela, et probablement une sorte de boucle. Cela signifie que dans le CPU, vous avez passé beaucoup plus dun cycle pour implémenter cette opération.
Dans un FPGA, vous pouvez simplement câbler ceci comme une paire de verrous. Vous obtenez vos données dans un registre, puis vous les câblez dans le registre différent dans lordre inverse des bits. Cela signifie que lopération se terminera en un seul cycle dhorloge dans le FPGA. Ainsi, en un seul cycle, le FPGS a terminé une opération qui a nécessité plusieurs milliers de cycles pour votre CPU à usage général! De plus, vous pouvez câbler probablement quelques centaines de ces registres en parallèle. Donc, si vous pouvez passer en quelques centaines de numéros sur le FPGA, en un seul cycle, il terminera ces milliers dopérations des centaines de fois, le tout en 1 cycle dhorloge FPGA.
Il y a beaucoup de choses qui CPU à usage général peut faire, mais comme limitation, nous avons mis en place des instructions généralisées et simples qui doivent nécessairement se développer en listes dinstructions simples pour accomplir certaines tâches. Je pourrais donc faire en sorte que le processeur à usage général ait une instruction telle que « ordre de bits inversé pour le registre 32 bits » et donner au processeur la même capacité que le FPGA que nous venons de construire, mais il existe un nombre infini dinstructions utiles possibles, et nous ne mettez que ceux qui justifient le coût des processeurs populaires.
FPGA, CPLD et ASIC vous donnent tous accès au matériel brut, ce qui vous permet de définir des opérations folles comme « décrypter les octets cryptés AES256 avec la clé » ou « décoder limage de la vidéo h.264 ». Ceux-ci ont des latences de plus dun cycle dhorloge dans un FPGA, mais ils peuvent être implémentés de manière beaucoup plus efficace que décrire lopération en millions de lignes de code dassemblage à usage général. Cela a également lavantage de rendre le FPGA / ASIC à usage fixe pour beaucoup de ces opérations plus économe en énergie car ils nont pas à faire autant de travail superflu!
Le parallélisme est lautre partie qui marque souligné, et bien que cela soit également important, lessentiel est lorsquun FPGA met en parallèle quelque chose qui était déjà coûteux dans le processeur en termes de cycles nécessaires pour effectuer lopération. Une fois que vous commencez à dire « Je peux effectuer en 10 cycles FPGA un tâche qui prend mon CPU 100.000 cycles, et je peux faire cette tâche en parallèle 4 éléments à la fois, « vous pouvez facilement voir pourquoi un FPGA pourrait être beaucoup plus rapide quun CPU!
Donc pourquoi nutilisons-nous pas FPGA, CPLD et ASIC pour tout? Parce quen général cest une puce entière qui ne fait quune seule opération. Cela signifie que même si vous pouvez obtenir un processus pour exécuter de nombreux ordres de grandeur plus rapidement dans votre FPGA / ASIC, vous ne pouvez pas le changer plus tard lorsque cette opération nest plus utile. La raison pour laquelle vous ne pouvez pas (généralement) changer un FPGA une fois cest dans un circuit que le câblage de linterface est fixe, et normalement le circuit ninclut pas de composants qui vous permettraient de reprogrammer le FPGA dans une configuration plus utile. Certains chercheurs essaient de construire des modules FPGA-CPU hybrides, où il y a une section du CPU qui est capable dêtre recâblée / reprogrammée comme un FPGA, vous permettant de « charger » une section efficace du CPU, mais aucun de ceux-ci ont déjà été commercialisés (pour autant que je sache).
Commentaires
- Pour lexemple de linversion des bits (et tous les autres bits swap / selection)) cela ne prend ‘ pas vraiment 1 cycle dhorloge, cela prend 0. Dans votre exemple, il faut 1 cycle dhorloge pour stocker les données dans un verrou , ce qui nest pas la même opération. Cela prend 1 cycle dhorloge, que vous inversiez les bits ou non. Lopération dinversion des bits est de 0 cycle dhorloge; pas de surcharge, juste un routage différent. La différence nest pas que la sémantique, surtout quand Vous commencez à additionner des éléments. Par exemple, combien de temps faut-il pour décaler un mot de 32 bits de 3 bits vers le bas, puis permuter tous les autres quartets, puis inverser?
- » FPGA-CP hybride Module U » – ils sont sur le marché depuis longtemps (voir xilinx.com/products/silicon-devices/ soc / zynq-7000 / index.htm pour un succès moderne), mais même sans support spécial, la combinaison de logiciels & HDL se fait généralement en implémentant un CPU logiciel à lintérieur le FPGA sur le fabric.
- @wjl Vous ‘ avez raison de dire quil ne prend techniquement aucun cycle pour effectuer lopération elle-même. Je dirais que votre exemple nest que sémantiquement différent, principalement parce que ces trois opérations se traduisent logiquement par un modèle de bits fixe (cest-à-dire que je commence par b1b2b3b4 et je termine par b3b1b4b2). Cétait un peu mon argument dans toute la réponse. Jessayais de souligner que décrire une opération comme une série détapes nest souvent nécessaire que lorsque vous avez un ensemble dinstructions fixe / une disposition de porte.
- @wjl: La façon dont David-Gardner a posé la question, il semble dire que » CPU » équivaut à un processeur Intel ou AMD x86 / x86_64 hautement synchronisé, pipeliné et optimisé. Il existe de nombreux processeurs » « , mais aucun de ceux conçus pour être installés dans un FPGA ne peut être cadencé comme un i7, ni ils sont presque aussi optimisés ou capables. En ce qui concerne les hybrides, je voulais plutôt dire quelque chose comme ceci: newsroom.intel.com/docs/DOC-1512 qui existe apparemment
- le Zynq nest vraiment pas ‘ trop mauvais dun processeur (ARM Cortex-A9 – la même chose qui exécute les tablettes électroniques, etc.), mais je suis daccord que ce serait bien plus génial davoir un FPGA intégré avec un x86_64 haute vitesse. =)
Réponse
Toutes les autres réponses populaires présentées ici parlent des différences littérales entre FPGA et CPU. Ils soulignent la nature parallèle du FPGA par rapport à la nature séquentielle dun CPU, ou donnent des exemples des raisons pour lesquelles certains algorithmes pourraient bien fonctionner sur un FPGA. Tous ces éléments sont bons et vrais, mais je dirais cependant qu’il existe une différence plus fondamentale entre les processeurs et les FPGA.
Quel est le dénominateur commun entre un FPGA et un processeur? Cest quils sont tous deux construits sur du silicium. Et dans certains cas, les mêmes processus de silicium.
La différence fondamentale réside dans les abstractions que nous empilons sur ce silicium. Il n’est pas possible pour un humain de comprendre tous les détails d’une conception de processeur moderne, du silicium au circuit intégré intégré. Ainsi, dans le cadre du processus dingénierie, nous divisons ce problème complexe en problèmes plus petits gérables que les humains peuvent comprendre.
Considérez ce quil faut pour transformer ce silicium en un processeur fonctionnel. Voici une vue un peu simplifiée des couches dabstraction nécessaires pour atteindre cet objectif:
-
Nous avons dabord des ingénieurs qui savent créer des transistors à partir de silicium. Ils savent comment concevoir de minuscules transistors qui absorbent lalimentation et commutent à la vitesse de 10 ou même 100 gigahertz, et ils savent comment concevoir des transistors robustes qui peuvent conduire des signaux avec suffisamment de puissance pour les envoyer hors dun boîtier IC et à travers un PCB à une autre puce.
-
Ensuite, nous avons des concepteurs de logique numérique qui savent comment assembler ces transistors dans des bibliothèques avec des centaines de cellules logiques différentes. Portes logiques, bascules, multiplexeurs et additionneurs, pour nen nommer que quelques-uns. Le tout dans une variété de configurations.
-
Ensuite, nous avons divers groupes dingénieurs qui savent comment assembler ces blocs numériques (et parfois analogiques) pour former des blocs fonctionnels de plus haut niveau comme des émetteurs-récepteurs à grande vitesse, des contrôleurs de mémoire, prédicteurs de branche, ALU, etc.
-
Ensuite, nous avons des concepteurs de CPU pour concevoir des conceptions de CPU haut de gamme en rassemblant ces unités fonctionnelles dans un système complet.
Et ça ne sarrête pas là. À ce stade, nous avons un processeur fonctionnel qui exécute le code dassemblage, mais ce nest pas un langage dans lequel la plupart des programmeurs écrivent de nos jours.
- Nous pourrions avoir un compilateur C pour compiler en assembleur code (probablement par une représentation intermédiaire)
- Nous pourrions ajouter une autre abstraction au-dessus de C pour obtenir un langage orienté objet
- Nous pourrions même écrire une machine virtuelle au-dessus de C ou C ++ pour que nous puissions interpréter des choses comme le code doctet Java
Et les couches dabstraction peuvent continuer à partir de là. Le point important ici est que ces couches dabstraction se combinent pour donner un système basé sur un processeur qui évolue massivement et coûte une infime fraction dune conception de silicium personnalisée.
CEPENDANT, le point important à souligner ici est que chaque abstraction a également un coût en soi. Le concepteur de transistors ne construit pas le transistor parfait pour chaque cas d’utilisation. Il construit une bibliothèque raisonnable, et donc parfois un transistor est utilisé qui consomme un peu plus dénergie ou un peu plus de silicium que ce qui est vraiment nécessaire pour le travail à accomplir. Et de même, les concepteurs logiques ne construisent pas toutes les cellules logiques possibles. Ils peuvent construire une porte NAND à 4 entrées et une porte NAND à 8 entrées, mais que se passe-t-il lorsquun autre ingénieur a besoin dune NAND à 6 entrées? Il utilise une porte NAND à 8 entrées et attache 2 entrées inutilisées, ce qui entraîne une perte de ressources en silicium et une perte de puissance. Et ainsi cela remonte la chaîne des abstractions. Chaque couche nous donne un moyen de gérer la complexité, mais en même temps nous charge un coût supplémentaire supplémentaire en termes de silicium et de puissance.
Maintenant, comparez ces abstractions à ce qui est nécessaire pour un FPGA. Essentiellement, les abstractions FPGA sarrêtent au n ° 2 dans la liste ci-dessus. Le FPGA permet aux développeurs de travailler au niveau de la couche logique numérique. Cest un peu plus sophistiqué que cela car les processeurs sont « codés en dur à cette couche et les FPGA doivent être configurés au moment de lexécution (ce qui, BTW, est pourquoi les processeurs exécutent généralement des fréquences beaucoup plus élevées), mais la vérité essentielle est que cela est loin peu dabstractions pour les FPGA que pour les CPU.
Donc, Pourquoi un FPGA peut-il être plus rapide quun CPU? En gros, cest parce que le FPGA utilise beaucoup moins dabstractions quun CPU, ce qui signifie que le concepteur travaille plus près du silicium. Il ne paie pas les coûts de toutes les nombreuses couches d’abstraction nécessaires aux processeurs. Il code à un niveau inférieur et doit travailler plus dur pour atteindre un peu de fonctionnalité, mais la récompense quil obtient de meilleures performances.
Mais bien sûr, il y a un inconvénient pour moins dabstractions. Toutes ces abstractions CPU sont là pour une bonne raison. Ils nous donnent un paradigme de codage beaucoup plus simple, ce qui signifie que plus de personnes peuvent facilement développer pour elles. Cela signifie à son tour quil existe beaucoup plus de conceptions de processeurs et que nous bénéficions donc dénormes avantages en termes de prix, déchelle et de temps de mise sur le marché.
Alors voilà. Les FPGA ont moins dabstractions et peuvent donc être plus rapides et plus écoénergétiques, mais difficiles à programmer. Les processeurs ont de nombreuses abstractions conçues pour les rendre faciles à développer, évolutives et bon marché. Mais ils abandonnent la vitesse et la puissance dans le commerce pour ces avantages.
Commentaires
- Aussi, FPGA ‘ Les s sont conçus à laide de simples blocs répétitifs destinés à effectuer des tâches logiques simples. Ils sont faits sur mesure pour certains types de tâches.Les CPU ‘, OTOH, ont de nombreuses parties fonctionnelles complexes qui font toutes des choses différentes. On pourrait considérer quun CPU est un groupe de nombreux périphériques différents comme FPGA (après tout, il ‘ nest que du silicium, de lélectronique et des mathématiques). Donc, il ‘ nest tout simplement pas une question dabstractions, mais ‘ une question de complexité. Les CPU ‘ sont des appareils complexes composés de nombreux types dappareils électriques, tandis quun FPGA en est composé de quelques-uns. Un CPU est un fusil de chasse tandis quun FPGA est un fusil.
Réponse
Alors que les autres réponses sont toutes correctes , aucun dentre eux naborde encore lexemple dextraction de bitcoins de votre question, qui est en effet un exemple décent. Lextraction de Bitcoin implique le calcul à plusieurs reprises dune fonction de hachage cryptographique, SHA-256 du résultat dun autre calcul SHA-256, de données où un seul entier 32 bits change, jusquà ce que le hachage résultant ait certaines propriétés. Chaque SHA-256 se compose de 64 répétitions du même algorithme impliquant des ajouts de 32 bits, des décalages de bits et dautres opérations de déformation des bits.
Si vous programmez cette boucle sur un processeur 32 bits (ou plus) , vous trouverez son jeu dinstructions très bien adapté à la tâche — SHA-256 a été conçu pour fonctionner efficacement sur les processeurs. Pourtant, vous nutiliserez peut-être que 2% de la zone de silicium dun processeur moderne, avec des fonctionnalités gourmandes en zones telles que la mise en cache, la multiplication, la division, les opérations en virgule flottante, la prédiction de branchement et de brach, etc. fournir une amélioration significative des performances pour cette tâche particulière.
Dans un matériel configurable comme un FPGA, vous implémentez simplement ces 2%, et optimisez davantage en oubliant tout sur lexécution du code, plutôt en concevant des portes pour calculer directement chacun des ces sous-fonctions souvent répétées. Pipelinées de telle sorte que chacune delles passe un résultat dans le prochain à chaque cycle dhorloge, et répétées 128 fois (et avec une logique supplémentaire spéciale où chaque SHA-256 commence et se termine), vous obtenez un résultat à chaque fois cycle dhorloge (pour peut-être 100 millions de hachages par seconde sur un FPGA annoncé pour prendre en charge 300 MHz sur une logique plus simple que celle-ci) tandis que sur un processeur moderne, vous pouvez vous attendre à un résultat tous les quelques milliers de cycles dhorloge par cœur, disons 10 millions de hachages par seconde sur un processeur multi-cœur multi-GHz.
Si cet exemple particulier vous intéresse, vous voudrez peut-être jeter un œil à mon réponse sur les éléments internes des mineurs ASIC sur bitcoin.stackexchange, car de nombreux mineurs FPGA fonctionnent de la même manière en utilisant du matériel configurable plutôt que sur mesure. Juste pour être complet « : il existe dautres possibilités, comme limiter ou éviter le pipelining que jai décrit en faveur dune parallélisation plus triviale en utilisant plusieurs hachages SHA-256 indépendants. En fonction des contraintes données par les internes de votre FPGA et sa taille totale , cela peut même donner de meilleures performances même si ce serait moins efficace en termes de nombre de portes et de frais de routage si vous aviez une liberté parfaite dans la conception de la puce entière, et pas seulement de la configuration dun FPGA.
Commentaires
- Cest ‘ un très bon point sur lutilisation du silicium.
- Mais peut-être (involontairement!) trompeur, considérant quun FPGA se compose de cellules quelque peu complexes avec de nombreuses portes physiques, dont une application typique nutilise encore quune fraction, permettant à leurs fabricants dannoncer des nombres de portes équivalents pour tenter de vous dire combien tout cela pourrait valoir dans un » typique » application …
Réponse
Les réponses ci-dessus, bien que correctes, manquent le point sur pourquoi les FPGA (et les ASIC personnalisés) sont particulièrement bons pour les calculs Bitcoin.
Le véritable avantage est quune grande partie des calculs SHA-256 sont des opérations logiques (par exemple, des décalages de bits) qui peuvent être effectuées dans câblage. Lorsque cela est fait de cette façon, ils nécessitent 0 cycle dhorloge.
Un autre avantage important est que les FPGA sont beaucoup plus économes en énergie (cest-à-dire MIPS par Watt) que les CPU, donc la quantité dénergie requise pour les calculs est beaucoup moins. Ceci est important car le coût de lextraction dun bitcoin dépend de la quantité délectricité que vous utilisez pour le fabriquer.
Les puces ASIC sont plus écoénergétiques que les FPGA, elles peuvent donc exécuter le même code à moindre coût. Vous pouvez également entasser plus dunités dexécution à bord pour les rendre plus rapides. Linconvénient est que le coût de fabrication dun ASIC personnalisé est très élevé, vous devrez donc vendre pas mal de puces pour couvrir le coût de fabrication.
Les GPU sont également utilisés pour fabriquer des bitcoins, mais comme ils le sont beaucoup moins écoénergétiques, ils ont perdu du terrain au profit des FPGA et des ASIC personnalisés.
Commentaires
- Si vous regardez lalgorithme de hachage Monero aka cryptonight, vous verrez quune implémentation FPGA est presque impossible en raison de la grande quantité de la mémoire devait être accédée au hasard (2 Mo). Un CPU a lavantage dans ce cas.
- @ lucas92 ne pouvez-vous pas intégrer la RAM dans FPGA pour accueillir la quantité de mémoire nécessaire?
- Vous avez probablement gagné ‘ t a assez déléments logiques dans le FPGA pour cela.