106 votes

Pourquoi les gens utilisent-ils les GPU pour les calculs de haute performance au lieu d'une puce plus spécialisée ?

D'après ce que j'ai compris, les gens ont commencé à utiliser les GPU pour le calcul général parce qu'ils constituent une source supplémentaire de puissance de calcul. Et bien qu'ils ne soient pas aussi rapides qu'un CPU pour chaque opération, ils possèdent de nombreux cœurs, de sorte qu'ils peuvent être mieux adaptés au traitement parallèle qu'un CPU. C'est logique si vous possédez déjà un ordinateur équipé d'un GPU pour le traitement graphique, mais que vous n'avez pas besoin des graphiques et que vous souhaitez une puissance de calcul supplémentaire. Mais je comprends aussi que les gens achètent des GPU spécifiquement 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 n'est pas assez puissante. J'enlève donc la cage du ventilateur que je garde dans ma chambre et j'aiguise les pales. Je le fixe à ma tondeuse avec du ruban adhésif et je trouve que cela fonctionne assez bien. Des années plus tard, je suis le responsable des achats d'une grande entreprise d'entretien des pelouses. J'ai un budget assez important à consacrer aux outils de tonte. Au lieu d'acheter des tondeuses à gazon, j'achète une série de ventilateurs en boîte. Là encore, ils fonctionnent bien, mais je dois payer des pièces supplémentaires (comme la cage) dont je ne me servirai finalement pas. (pour les besoins de cette analogie, nous devons supposer que les tondeuses à gazon et les ventilateurs en boîte coûtent à peu près la même chose).

Alors pourquoi n'y a-t-il pas de marché pour une puce ou un appareil qui possède la puissance de traitement d'un GPU, mais pas la surcharge graphique ? Je pense à quelques explications possibles. Laquelle d'entre elles, le cas échéant, est correcte ?

  • Une telle alternative serait trop coûteuse à développer alors que le GPU est déjà une bonne option (les tondeuses à gazon n'existent pas, pourquoi ne pas utiliser ce ventilateur de boîte parfaitement bon ?)
  • Le fait que "G" signifie "graphics" n'indique qu'une utilisation prévue et ne signifie pas réellement qu'un effort est fait pour rendre la puce mieux adaptée au traitement graphique qu'à tout autre type de travail (les tondeuses à gazon et les ventilateurs de boîte sont la même chose quand on y regarde de plus près ; aucune modification n'est nécessaire pour que l'une fonctionne comme l'autre).
  • Les GPU modernes portent le même nom que leurs anciens prédécesseurs, mais de nos jours, les GPU haut de gamme ne sont pas conçus pour traiter spécifiquement les graphiques (les ventilateurs des boîtes modernes sont conçus pour fonctionner principalement comme des tondeuses à gazon, même si les anciens ne l'étaient pas).
  • Il est facile de traduire à peu près n'importe quel problème dans le langage du traitement graphique (on peut couper de l'herbe en soufflant de l'air dessus très rapidement).

EDIT :

Ma question a reçu une réponse, mais au vu de certains commentaires et réponses, je pense que je dois clarifier ma question. Je ne demande pas pourquoi tout le monde n'achète pas ses propres calculs. Il est clair que cela serait trop coûteux la plupart du temps.

J'ai simplement observé qu'il semble y avoir une demande pour des appareils capables d'effectuer rapidement des calculs parallèles. Je me demandais pourquoi il semble que le dispositif optimal soit l'unité de traitement graphique, plutôt qu'un dispositif conçu à cette fin.

108voto

Bob Points 58080

C'est vraiment une combinaison de toutes vos explications. Moins cher et plus facile, ça existe déjà, et le design s'est éloigné du graphisme pur.


Un GPU moderne peut être considéré comme étant principalement processeurs de flux avec du matériel graphique supplémentaire (et quelques accélérateurs à fonction fixe, par exemple pour le codage et le décodage de la vidéo). GPGPU La programmation utilise aujourd'hui des API spécialement conçues à cet effet (OpenCL, Nvidia CUDA, AMD APP).

Au cours des dix ou vingt dernières années, les GPU sont passés d'un pipeline à fonction fixe (essentiellement graphique) à un pipeline programmable ( shaders vous permettent d'écrire des instructions personnalisées) à des API plus modernes, comme OpenCL, qui offrent un accès direct aux cœurs de shaders sans le pipeline graphique correspondant.

Les autres éléments graphiques sont mineurs. Ils représentent une si petite partie du coût de la carte qu'il n'est pas sensiblement moins cher de les laisser de côté, et vous devez supporter le coût d'un design supplémentaire. Il n'y a pas d'équivalent informatique pour la plupart des GPU, sauf dans les niveaux les plus élevés, et ceux-ci sont assez chers.

Les GPU de "jeu" normaux sont très couramment utilisés car les économies d'échelle et la simplicité relative les rendent bon marché et faciles à utiliser. Il est assez facile de passer de la programmation graphique à l'accélération d'autres programmes avec le GPGPU. Il est également facile de mettre à niveau le matériel au fur et à mesure que des produits plus rapides et plus récents sont disponibles, contrairement aux autres options.


En gros, les choix se résument à :

  • CPU polyvalente, idéale pour les branchements et le code séquentiel.
  • GPU de "jeu" normal
  • GPU orientés vers le calcul, par exemple Nvidia Tesla y Radeon Instinct Souvent, ils ne prennent pas du tout en charge la sortie graphique, ce qui fait que le terme GPU est un peu mal choisi. Cependant, ils utilisent des cœurs de GPU similaires à ceux des GPU normaux et le code OpenCL/CUDA/APP est plus ou moins directement portable.
  • Les FPGA, qui utilisent un modèle de programmation très différent et ont tendance à être très coûteux. C'est là qu'il existe une importante barrière à l'entrée. En outre, ils ne sont pas nécessairement plus rapides qu'un GPU, en fonction de la charge de travail.
  • ASIC, circuits conçus sur mesure (matériel). C'est très très cher et cela ne vaut la peine qu'à une échelle extrême (nous parlons de plusieurs milliers d'unités, au minimum), et lorsque vous êtes sûr que le programme n'aura jamais besoin de changer. Elles sont rarement réalisables dans le monde réel. Vous devrez également revoir la conception et les tests de l'ensemble du système à chaque fois que la technologie évoluera - vous ne pourrez pas simplement remplacer le processeur par un nouveau, comme c'est le cas pour les CPU et les GPU.

31voto

BobtheMagicMoose Points 604

Mon analogie préférée :

  • CPU : Un génie polymorphe. Peut faire une ou deux choses à la fois, mais ces choses peuvent être très complexes.
  • GPU : Une tonne de travailleurs peu qualifiés. Chacun d'entre eux ne peut pas résoudre de très gros problèmes, mais en masse, vous pouvez faire beaucoup de choses. Pour répondre à votre question, oui, il y a des frais graphiques, mais je pense qu'ils sont marginaux.
  • ASIC/FPGA : Une entreprise. Vous pouvez engager une tonne de travailleurs peu qualifiés ou quelques génies, ou une combinaison de travailleurs peu qualifiés et de génies.

Ce que vous utilisez dépend de la sensibilité au coût, du degré de parallélisation d'une tâche et d'autres facteurs. En raison de la façon dont le marché a évolué, les GPU sont le meilleur choix pour la plupart des applications hautement parallèles et les CPU sont le meilleur choix lorsque la puissance et le coût unitaire sont les principales préoccupations.

Pour répondre directement à votre question : pourquoi un GPU plutôt qu'un ASIC/FPGA ? En général, le coût. Même avec les prix gonflés des GPU d'aujourd'hui, il est toujours (généralement) moins cher d'utiliser un GPU que de concevoir un ASIC pour répondre à vos besoins. Comme le souligne @user912264, il existe des tâches spécifiques qui peuvent être utiles aux ASIC/FPGA. Si vous avez une tâche unique et que vous bénéficiez d'une mise à l'échelle, cela peut valoir la peine de concevoir un ASIC/FPGA. En fait, vous pouvez concevoir/acheter/licencier des conceptions FPGA spécifiquement dans ce but. C'est le cas, par exemple, pour alimenter les pixels des téléviseurs haute définition.

10voto

jstbnfdsrtah Points 109

Votre analogie est mauvaise. Dans l'analogie, quand vous achetez de l'équipement 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 informatique - les GPU sont le meilleur outil disponible.

Les coûts de R&D et les gains de performance possibles pour une puce spécialisée sont probablement trop élevés pour en justifier la fabrication.

Cela dit, je sais que Nvidia a commercialisé des GPU spécifiquement destinés à l'informatique générale - ils n'avaient pas de sorties vidéo - un peu comme si on vendait des ventilateurs de boîte avec les cages déjà retirées.

9voto

MCCCS Points 217

Bien sûr, vous pouvez utiliser des puces spécialisées, que ce soit pour l'efficacité énergétique ou la vitesse de calcul. Laissez-moi vous raconter l'histoire du minage de Bitcoin :

  • Les bitcoins sont nouveaux, les geeks les exploitent avec leurs processeurs.
  • Le bitcoin est quelque peu nouveau, les geeks intelligents le minent avec leurs GPU.
  • Le bitcoin est maintenant (un peu) célèbre, les gens achètent des FPGA.
  • Le bitcoin est maintenant célèbre (2013), même les débutants achètent des ASIC ("Application Specific Integrated Circuits") pour miner efficacement.
  • La rémunération des blocs baisse (périodiquement), même les vieux ASIC ne sont plus rentables.

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 se spécialise. Cependant, ils sont assez difficiles à concevoir et infaisables à 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 une de ceux du Walmart le plus proche.

TL;DR Bien sûr, vous pouvez utiliser des puces plus spécialisées.

8voto

Mario Chapa Points 111

Ce que vous décrivez dans votre analogie est exactement ce qui s'est passé. Tout comme vous avez pris votre ventilateur et aiguisé les lames pour essayer de l'utiliser comme une tondeuse, un groupe de chercheurs a réalisé "Hé, nous avons une belle unité de traitement multicœur ici, essayons de l'utiliser pour des calculs à usage général !

Le résultat était bon et la balle a commencé à rouler. Le GPU est passé d'un dispositif exclusivement graphique à un support de calcul général pour aider dans les situations les plus exigeantes.

Parce que de toute façon, les opérations les plus exigeantes en termes de calcul que nous attendons des ordinateurs sont les graphiques. Il suffit de jeter un coup d'œil aux progrès stupéfiants de l'apparence des jeux d'aujourd'hui par rapport à ceux 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 le fait qu'ils puissent également être utilisés pour accélérer une certaine catégorie de calculs généraux (c'est-à-dire extrêmement parallèles) n'a fait qu'accroître leur popularité.

Donc, en conclusion, la première explication que vous proposez est la plus précise :

  • Une telle alternative serait trop coûteuse à développer alors que le GPU est déjà une bonne option.

Les GPU étaient déjà là, ils étaient disponibles pour tout le monde et ils fonctionnaient.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X