D'après ce que j'ai compris, les gens ont commencé à utiliser les GPU pour l'informatique générale car ils constituent une source supplémentaire de puissance de calcul. Et bien qu’ils ne soient pas aussi rapides qu’un processeur pour chaque opération, ils comportent de nombreux cœurs, de sorte qu’ils peuvent être mieux adaptés au traitement en parallèle qu’un processeur. Cela a du sens si vous possédez déjà un ordinateur doté d’un GPU pour le traitement graphique, mais que vous n’avez pas besoin des graphiques et que vous souhaitez davantage de puissance de calcul. Mais je comprends aussi que les gens achètent des GPU en particulier pour ajouter de la puissance de calcul, sans intention de les utiliser pour traiter des graphiques. Pour moi, cela ressemble à l'analogie suivante:
Je dois couper mon gazon, mais ma tondeuse à gazon est faible. Je retire donc la cage du ventilateur que je garde dans ma chambre et affûte les pales. Je colle du ruban adhésif à ma tondeuse, et je trouve que cela fonctionne assez bien. Des années plus tard, je suis le responsable des achats pour une grande entreprise d’entretien des pelouses. J'ai un budget considérable à consacrer aux outils de tonte de gazon. Au lieu d’acheter des tondeuses à gazon, j’achète un groupe d’admirateurs. Encore une fois, ils fonctionnent bien, mais je dois payer pour des pièces supplémentaires (comme la cage) que je ne finirai pas par utiliser. (pour les besoins de cette analogie, nous devons supposer que les tondeuses à gazon et les ventilateurs de caisse coûtent environ le même prix)
Alors pourquoi n’existe-t-il pas un marché pour une puce ou un périphérique doté de la puissance de traitement d’un GPU, mais pas de la surcharge graphique? Je peux penser à quelques explications possibles. Lequel d'entre eux, le cas échéant, est correct?
MODIFIER:
On a répondu à ma question, mais compte tenu de certains commentaires et réponses, j'estime que je devrais clarifier ma question. Je ne demande pas pourquoi tout le monde n'achète pas ses propres calculs. Clairement, ce serait trop cher la plupart du temps.
J'ai simplement constaté qu'il semble exister une demande pour des appareils capables d'effectuer rapidement des calculs en parallèle. Je me demandais pourquoi il semble que le périphérique optimal soit l’unité de traitement graphique, par opposition à un périphérique conçu à cet effet.
C'est vraiment une combinaison de toutes vos explications. Moins cher et plus facile, il existe déjà et le design s’est éloigné du pur graphisme.
Un GPU moderne peut être considéré principalement sous la forme de processeurs de flux avec du matériel graphique supplémentaire (et des accélérateurs à fonction fixe, par exemple pour le codage et le décodage de vidéos). La programmation de GPGPU de nos jours utilise des API spécialement conçues à cet effet (OpenCL, Nvidia CUDA, AMD APP).
Au cours des deux ou trois dernières décennies, les GPU ont évolué d’un pipeline à fonction fixe (uniquement graphique) à un pipeline programmable ( shaders vous permettant d’écrire des instructions personnalisées) vers des API plus modernes, telles que OpenCL, offrant un accès direct. aux noyaux de shader sans le pipeline graphique qui les accompagne.
Les bits graphiques restants sont mineurs. Ils représentent une si petite partie du coût de la carte qu'il n'est pas beaucoup moins coûteux de les laisser de côté et que vous assumez le coût d'un dessin supplémentaire. Cela n’est donc généralement pas fait - il n’existe pas d’équivalent orienté calcul de la plupart des GPU - sauf aux niveaux les plus élevés, et ceux-ci sont assez coûteux.
Les GPU "de jeu" normaux sont très couramment utilisés car des économies d’échelle et une simplicité relative les rendent peu coûteux et faciles à utiliser. Il est assez facile de passer de la programmation graphique à l’accélération des programmes avec GPGPU. Il est également facile de mettre à niveau le matériel, car des produits plus récents et plus rapides sont disponibles, contrairement aux autres options.
En gros, les choix se résument à:
Mon analogie préférée:
Ce que vous utilisez dépend de la sensibilité aux coûts, du degré de parallélisabilité d'une tâche et d'autres facteurs. En raison de l'évolution du marché, les GPU constituent le meilleur choix pour la plupart des applications hautement parallèles et les processeurs sont le meilleur choix lorsque la puissance et le coût unitaire sont les préoccupations principales.
Directement à votre question: pourquoi un GPU sur un ASIC/FPGA? Généralement coûté. Même avec les prix GPU gonflés d'aujourd'hui, il est toujours (généralement) moins coûteux d'utiliser un GPU que de concevoir un ASIC pour répondre à vos besoins. Comme @ user912264 le souligne, certaines tâches spécifiques peuvent être utiles pour les ASIC/FPGA. Si vous avez une tâche unique et que vous tirez parti de l’échelle, il peut être intéressant de concevoir un ASIC/FPGA. En fait, vous pouvez concevoir/acheter/concéder sous licence des conceptions FPGA spécifiquement à cette fin. Ceci est fait pour alimenter les pixels dans les téléviseurs haute définition par exemple.
Votre analogie est mauvaise. Par analogie, lorsque vous achetez du matériel pour une grande entreprise d’entretien des pelouses, vous supposez / il existe de bonnes tondeuses à gazon. Ce n'est pas le cas dans le monde de l'informatique - les GPU sont le meilleur outil disponible.
Les coûts de R & D et les gains de performances possibles pour une puce spécialisée sont probablement trop élevés pour justifier son utilisation.
Cela dit, je suis au courant que Nvidia a mis au point des GPU spécialement conçus pour l’informatique grand public - ils n’ont pas de sortie vidéo - un peu comme si on vendait des ventilateurs de boîte avec les cages déjà retirées.
Bien sûr, vous pouvez utiliser des puces spécialisées, soit pour l'efficacité énergétique, soit pour la vitesse de calcul. Laissez-moi vous raconter l'histoire de l'exploitation minière Bitcoin:
Donc non, il n'y a aucune raison d'utiliser un GPU au lieu d'une "calculatrice géante" spécialisée. Plus les incitations économiques sont importantes, plus le matériel est spécialisé. Cependant, ils sont assez difficiles à concevoir et impossibles à fabriquer si vous n'en produisez pas des milliers à la fois. S'il n'est pas viable de concevoir des puces, vous pouvez en acheter un parmi le { ceux } _ du Walmart le plus proche.
TL; DR Bien sûr, vous pouvez utiliser des puces plus spécialisées.
Ce que vous décrivez dans votre analogie est exactement ce qui s’est passé. Juste au moment où vous attrapez votre ventilateur et affiliez les lames pour essayer de l’utiliser comme tondeuse, un groupe de recherches a réalisé: "Hé, nous avons une jolie unité de traitement multicœur très jolie ici, essayons de l’utiliser pour des calculs généraux! ".
Le résultat était bon et la balle a commencé à rouler. Le GPU est passé d’un périphérique graphique à la prise en charge du calcul général pour aider dans les situations les plus difficiles.
Car de toute façon, l’opération la plus exigeante en calcul que nous attendons des ordinateurs est la représentation graphique. Il suffit de jeter un coup d'œil sur les avancées stupéfiantes de l'apparence actuelle des jeux par rapport à celles d'il y a quelques années. Cela signifie que beaucoup d’efforts et d’argent ont été consacrés au développement des GPU, et que leur utilisation pourrait également servir à accélérer une certaine classe de calcul à usage général (c’est-à-dire extrêmement parallèle) ne faisait qu’ajouter à leur popularité.
Donc, en conclusion, la première explication que vous proposez est la plus précise:
Les GPU, là où ils étaient déjà là, sont facilement disponibles pour tout le monde et ils ont travaillé.
Plus précisément, les GPU ne sont pas des "cœurs" au sens de "parallélisme de tâches". Pour la plupart, il se présente sous la forme de "parallélisme de données". SIMD est "instruction unique données multiples". Cela signifie que vous ne feriez pas ceci:
for parallel i in range(0,1024): c[i] = a[i] * b[i]
Cela signifie que vous disposez de 1024 instructions d'instruction effectuant toutes des tâches distinctes progressant à des vitesses différentes. SIMD, ou "informatique vectorielle" exécute des instructions sur des tableaux entiers en une seule fois, plus comme ceci:
c = a * b
Les "boucles" sont dans les instructions "*" et "=", plutôt qu'en dehors des instructions. Ce qui précède ferait cela pour tous les 1024 éléments en même temps, au pointeur d'instruction SAME pour tous. C'est comme avoir trois registres énormes pour a, b et c. Le code SIMD est extrêmement contraint et ne fonctionne bien que pour les problèmes qui ne sont pas trop "ramifiés".
Dans des cas réalistes, ces valeurs SIMD ne sont pas aussi importantes que 1024 éléments. Imaginez une variable qui est un gang d’int32 lié ensemble. Vous pouvez penser à la multiplier et affecter comme une instruction machine réelle.
int32_x64 c; int32_x64 b; int32_x64 a; c = b * a;
Les vrais GPU sont plus compliqués que SIMD, mais c’est leur essence. C'est pourquoi vous ne pouvez pas lancer un algorithme de processeur aléatoire sur un processeur graphique et vous attendre à une accélération. Plus l'algorithme comporte de branchements d'instructions, moins il est approprié pour un GPU.
Les autres réponses ici sont très bonnes. Je vais aussi verser mes 2 centimes.
Une des raisons pour lesquelles les processeurs sont devenus si omniprésents est leur flexibilité. Vous pouvez les reprogrammer pour une infinité de tâches. De nos jours, il est moins coûteux et plus rapide pour les entreprises qui fabriquent des produits d'insérer un petit processeur ou un microcontrôleur dans quelque chose et de le programmer, plutôt que de développer des circuits personnalisés pour effectuer la même tâche.
En utilisant le même appareil que les autres, vous pouvez tirer parti des solutions connues aux problèmes rencontrés avec ce même appareil (ou similaire). Et à mesure que la plate-forme mûrit, vos solutions évoluent et deviennent très matures et optimisées. Les personnes qui codent sur ces appareils acquièrent également une expertise et deviennent très performantes.
Si vous deviez créer un nouveau type d’appareil à partir de rien, une alternative au GPU, il faudrait des années pour que les utilisateurs les plus anciens adoptent réellement le savoir. Si vous attachez un ASIC à votre CPU, comment optimiser les calculs de déchargement sur cet appareil?
La communauté des architectes informatiques est enthousiasmée par cette idée depuis plusieurs années (évidemment, elle était populaire auparavant, mais elle a récemment connu une renaissance). Ces «accélérateurs» (leur terme) ont des degrés différents de reprogrammabilité. Le problème est de savoir dans quelle mesure définissez-vous l'étendue du problème que votre accélérateur peut résoudre? J'ai même parlé à des personnes qui travaillaient à la création d'un accélérateur utilisant des circuits analogiques avec amplificateurs opérationnels pour calculer des équations différentielles. Excellente idée, mais portée extrêmement étroite.
Une fois que vous avez un accélérateur en état de marche, les forces économiques vont décider de votre destin. L'inertie du marché est une force incroyable. Même si quelque chose est une bonne idée, est-il économiquement possible de refactoriser vos solutions de travail pour utiliser ce nouvel appareil? Peut-être peut-être pas.
Les GPU sont en fait horribles pour certains types de problèmes, de sorte que de nombreuses personnes/entreprises travaillent sur d'autres types de périphériques. Mais les GPU sont déjà tellement enracinés que leurs appareils deviendront-ils jamais économiquement viables? Je suppose que nous verrons.
Edit: Élargir un peu ma réponse, maintenant que je ne suis plus dans le bus.
Le projet Intel Larrabee est une étude de cas prudente. Cela a commencé comme un dispositif de traitement parallèle capable de créer des graphiques dans un logiciel; il n'y avait pas de matériel graphique spécialisé. J'ai parlé à quelqu'un qui travaillait sur le projet, et l'une des principales raisons pour lesquelles il a dit que cela avait échoué et avait été annulé (en plus d'une politique interne horrible) était qu'ils ne pouvaient tout simplement pas obtenir du compilateur qu'il produise un code correct. Bien sûr, cela produisait du code de travail, mais si tout le but de votre produit est la performance maximale, il est préférable d’avoir un compilateur qui produit un code plutôt optimal. Cela nous ramène à mon commentaire précédent sur le manque d’expertise profonde en matériel et en logiciel pour votre nouveau périphérique, qui pose un gros problème.
Certains éléments de la conception Larrabee ont été intégrés au MIC Xeon Phi/Intel. Ce produit a effectivement été mis sur le marché. Il était entièrement axé sur la parallélisation des calculs scientifiques et autres types de calcul HPC. On dirait que c'est un échec commercial maintenant. Une autre personne à qui j'ai parlé chez Intel a laissé entendre qu'elle n'était tout simplement pas compétitive en termes de rapport prix/performances avec les GPU.
Les gens ont essayé d'intégrer la synthèse logique des FPGA dans les compilateurs, de sorte que vous puissiez générer automatiquement du code pour vos accélérateurs FPGA. Ils ne fonctionnent pas très bien.
Le nuage semble être un lieu propice aux accélérateurs ou à d’autres alternatives aux GPU. L'économie d'échelle qui existe dans ces grandes entreprises telles que Google, Amazon et Microsoft rend l'investissement dans des schémas de calcul alternatifs intéressant. Quelqu'un a déjà mentionné les unités de traitement du tenseur de Google. Microsoft dispose de FPGA et d’autres éléments dans son infrastructure Bing et Azure. Même histoire avec Amazon. Il est tout à fait logique que l’échelle puisse compenser votre investissement en temps, en argent et en larmes d’ingénieur.
En résumé, la spécialisation est en contradiction avec beaucoup d'autres choses (économie, maturité de la plate-forme, expertise en ingénierie, etc.). La spécialisation peut considérablement améliorer vos performances, mais elle réduit la portée de votre appareil. Ma réponse a mis l’accent sur de nombreux aspects négatifs, mais la spécialisation présente également de nombreux avantages. Il faut absolument poursuivre et enquêter, et comme je l’ai mentionné plus tôt, de nombreux groupes le font de manière très agressive.
Désolé, éditez à nouveau: je pense que votre prémisse initiale est fausse. Je pense qu’il s’agissait moins de chercher des sources supplémentaires de puissance de calcul, mais plutôt de reconnaître les opportunités. La programmation graphique est très lourde en algèbre linéaire, et le GPU a été conçu pour effectuer efficacement des opérations courantes telles que multiplication de matrice, opérations de vecteur, etc. Opérations qui sont également très courantes dans le calcul scientifique.
L'intérêt pour les GPU a commencé au moment même où les gens ont fini par reconnaître que les promesses du projet EPIC Intel/HP étaient largement surestimées (fin des années 90, début des années 2000). Il n'y avait pas de solution générale à la parallélisation du compilateur. Donc, plutôt que de dire "où trouvons-nous plus de puissance de traitement, oh, nous pourrions essayer le GPU", je pense que c’était plus "nous avons quelque chose qui est bon pour les calculs parallèles, pouvons-nous le rendre plus généralement programmable". Un grand nombre de personnes impliquées appartenaient à la communauté informatique scientifique, qui disposaient déjà d'un code Fortran parallèle pouvant être exécuté sur des machines Cray ou Tera (Tera MTA comptait 128 threads matériels). Peut-être y a-t-il eu un mouvement des deux côtés, mais je n’ai entendu parler que des origines de GPGPU.
Un ASIC (silicium personnalisé) est très rapide, mais sa conception et sa fabrication sont très onéreuses. Auparavant, les ASIC étaient spécifiques à un usage spécifique, et la CPU était une approche permettant de "programmer" les ordinateurs afin que les tâches informatiques puissent être exécutées par logiciel. Les premiers processeurs donnaient aux utilisateurs la possibilité de tirer parti de la puissance de ASIC sans le coût énorme lié à la programmation de la puce sur le terrain. Cette approche a rencontré le succès SO et a donné naissance à l'ordinateur (très) rapide que vous utilisez actuellement.
Alors pourquoi les GPU?
Au milieu des années 90, 3DFX s'est rendu compte que les tâches de rendu 3D étaient si spécifiques qu'un ASIC personnalisé serait BEAUCOUP meilleur qu'un processeur. Ils ont créé un co-processeur informatique qui délestait les tâches de rendu 3D du processeur vers ce co-processeur, qu'ils ont appelé un "GPU". La concurrence et la demande du marché ont poussé l'innovation dans ce domaine à un point tel que les GPU effectuaient des calculs BEAUCOUP plus rapidement que les CPU, alors la question se posa: "Pourquoi ne puis-je pas utiliser le GPU pour calculer mes chiffres au lieu du CPU?" Les fabricants de GPU ont vu une demande et un moyen de gagner plus d’argent. Ils ont donc commencé à modifier leurs plates-formes pour permettre aux développeurs d’utiliser leur matériel. Mais le matériel informatique était si spécifique qu'il existait et qu'il restait des limites à ce que vous pouvez demander au GPU de faire. Je ne vais pas entrer dans les détails sur pourquoi ici.
Alors, pourquoi n'y avait-il pas plus de silicium spécifique? Pourquoi JUST Graphics?
Deux raisons: 1) Prix. Les GPU avaient un bon marché et pouvaient le justifier, mais même à l'époque, c'était un risque énorme. Personne ne savait vraiment si 3DFX pourrait faire un profit (en fait, ils ne pouvaient pas réellement, et sont devenus obsolètes). Même maintenant, avec la taille du marché des GPU, il n’ya vraiment que 3 concurrents. 2) Les processeurs répondaient effectivement au besoin de "silicium personnalisé" avec des extensions d’instructions. Revenons à MMX. C’était en fait la tentative d’Intel d’accélérer les graphismes dans le processeur alors que 3DFX prenait de la vitesse. Depuis lors, le jeu d'instructions x86 est devenu assez volumineux avec toutes ces extensions personnalisées. À l’époque, beaucoup de ces extensions avaient un sens (comme le MMX), mais ne sont pour l’instant plus quasiment nul dans le processeur. Cependant, vous ne pouvez pas les supprimer car cela endommagerait les logiciels existants. C'est en fait l'un des arguments de vente de ARM - ARM est un jeu d'instructions simplifié. Il n'y a pas autant d'extensions d'instructions, mais cela rend le silicium plus petit et moins cher à fabriquer.
Il me semble que vous pourriez gagner beaucoup d’argent si vous pouviez réduire le coût du silicium personnalisé. Est-ce que personne ne travaille là-dessus?
Il existe une technologie appelée FPGA - réseau de portes programmables sur site, qui existe depuis les débuts de l'informatique. C'est essentiellement une puce que vous pouvez concevoir "sur le terrain" à l'aide d'un logiciel. C'est une technologie très cool, mais toute la structure nécessaire pour rendre la puce programmable utilise BEAUCOUP de silicium et les fait fonctionner à des vitesses d'horloge beaucoup plus basses. Les FPGA PEUVENT être plus rapides que les CPU, si vous avez assez de silicium sur la puce ET que vous pouvez paralléliser efficacement la tâche. Mais ils sont limités dans la quantité de logique que vous pouvez leur donner. Tous les FPGA, sauf les plus chers, étaient plus lents que les GPU pour l'exploitation minière au début des bitcoins, mais leurs homologues ASIC ont effectivement mis fin à la rentabilité de l'exploitation des GPU. D'autres crypto-devises ont utilisé des algorithmes spécifiques qui ne peuvent pas être mis en parallèle. Par conséquent, les FPGA et les ASIC ne sont pas assez performants pour justifier le coût, comparés aux processeurs et aux GPU.
Le limiteur principal avec les FPGA est la taille du silicium - combien de logique pouvez-vous insérer sur la puce? La seconde est la vitesse d'horloge, car il est difficile d'optimiser des éléments tels que les points chauds, les fuites et les diaphonies dans un FPGA. De nouvelles méthodes de fabrication ont minimisé ces problèmes et Intel s’est associé à Altera pour fournir un FPGA qui peut être utilisé par les ingénieurs pour tirer parti des avantages du "silicium personnalisé" en tant que co-processeur dans un serveur. Donc, ça vient, dans un sens.
Les FPGA remplaceront-ils jamais les processeurs et les GPU?
Probablement pas de sitôt. Les derniers CPU et GPU sont MASSIVE et le silicium hautement optimisé pour les performances thermiques et électriques. Vous ne pouvez pas optimiser les FPGA de la même manière qu'un ASIC personnalisé. À moins d’une technologie révolutionnaire, le processeur restera probablement le cœur de votre ordinateur avec les coprocesseurs FPGA et GPU.
En effet, il existe des cartes spécialisées pour l’informatique à haut débit, par exemple: Xilinx a une liste list sur 178 cartes PCI-e utilisant leurs FPGA, et environ un tiers de ces cartes sont des "calculateurs" avec une ou plusieurs puces FPGA puissantes et beaucoup de mémoire DDR intégrée. Il existe également des cartes DSP hautes performances ( exemple ) destinées aux tâches informatiques hautes performances.
Je suppose que la popularité des cartes GPU provient de leur objectif de toucher un groupe de clients plus large. Vous n'avez pas besoin d'investir dans du matériel spécial pour jouer avec Nvidia CUDA. Ainsi, lorsque vous aurez une tâche nécessitant du matériel spécial, les GPU Nvidia auront un avantage concurrentiel dans la mesure où vous savez déjà comment les programmer.
Je pense que la réponse à votre question dépend de la manière de définir le calcul haute performance.
En général, le calcul haute performance est lié au temps de calcul. Dans ce cas, j'aime bien partager le lien de cluster de calcul haute performance .
Le lien est spécifié la raison d'utilisation du GPU; L'utilisation de cartes graphiques (ou plutôt de leurs GPU) pour effectuer des calculs pour le calcul en grille est beaucoup plus économique que l'utilisation d'un processeur, même si elle est moins précise.