394 votes

Pourquoi utilisons-nous encore des CPU au lieu de GPU ?

Il me semble que de nos jours, de nombreux calculs sont effectués sur le GPU. Il est évident que les graphiques y sont réalisés, mais l'utilisation de CUDA et d'autres outils similaires, l'IA, les algorithmes de hachage (pensez aux bitcoins) et autres sont également réalisés sur le GPU. Pourquoi ne pouvons-nous pas simplement nous débarrasser du CPU et utiliser le GPU seul ? Qu'est-ce qui rend le GPU tellement plus rapide que le CPU ?

3 votes

Comment puis-je savoir quelles réponses contiennent des informations correctes ? Devrais-je attendre que d'autres votent les réponses en haut ou en bas ? Je pense que j'ai été trop hâtif en acceptant une réponse :O

14 votes

Il y a maintenant quelques réponses récentes @ell, qui ne contiennent pas de "désinformation". Elles montent progressivement vers le haut avec des votes positifs en raison du mécanisme de marché efficace du StackExchange merveilleusement conçu ;-) Je vous suggère d'attendre un peu plus longtemps avant d'accepter une réponse. On dirait que c'est ce que vous faites avec beaucoup de prudence. C'est une bonne question, d'ailleurs. Elle peut sembler évidente, mais elle ne l'est pas du tout. Merci de l'avoir posée !

0 votes

Il n'y a aucune raison pour laquelle on ne pourrait pas, par exemple, créer un JITC Java pour un GPU, du point de vue de la génération de code. De plus, la plupart du code du système d'exploitation est maintenant écrit en C/C++, qui peut être facilement reciblé. On n'est donc pas lié à l'héritage x86 de manière vraiment significative (sauf si vous utilisez Windoze). Le problème est que peu de GPU (si tant est qu'il y en ait) sont bons pour le traitement général.

407voto

Dj S Points 101

La réponse TL;DR : Les GPU ont beaucoup plus de cœurs de processeur que les CPU, mais comme chaque cœur de GPU fonctionne beaucoup plus lentement qu'un cœur de CPU et qu'ils ne disposent pas des fonctionnalités nécessaires aux systèmes d'exploitation modernes, ils ne sont pas appropriés pour effectuer la plupart des traitements de l'informatique quotidienne. Ils sont plus adaptés aux opérations de calcul intensif, comme le traitement vidéo et les simulations physiques.


GPGPU est encore un concept relativement nouveau. À l'origine, les GPU n'étaient utilisés que pour le rendu de graphiques ; au fur et à mesure que la technologie a progressé, le grand nombre de cœurs dans les GPU par rapport aux CPU a été exploité en développant les capacités de calcul des GPU afin qu'ils puissent traiter simultanément de nombreux flux parallèles de données, quelles que soient ces données. Bien que les GPU puissent avoir des centaines, voire des milliers de processeurs de flux, chacun d'entre eux fonctionne plus lentement qu'un cœur de CPU et possède moins de fonctionnalités (même si elles sont Complète de Turing et peut être programmé pour exécuter n'importe quel programme qu'un CPU peut exécuter). Les caractéristiques manquantes des GPU sont les interruptions et la mémoire virtuelle, qui sont nécessaires pour mettre en œuvre un système d'exploitation moderne.

En d'autres termes, les CPU et les GPU ont des architectures sensiblement différentes qui les rendent mieux adaptés à des tâches différentes. Un GPU peut traiter de grandes quantités de données dans de nombreux flux, en effectuant des opérations relativement simples sur ces données, mais il est mal adapté au traitement lourd ou complexe d'un seul ou de quelques flux de données. Un CPU est beaucoup plus rapide par cœur (en termes d'instructions par seconde) et peut effectuer des opérations complexes sur un seul ou quelques flux de données plus facilement, mais ne peut pas traiter efficacement de nombreux flux simultanément.

Par conséquent, les GPU ne sont pas adaptés pour traiter les tâches qui ne bénéficient pas de manière significative ou ne peuvent pas être parallélisées, y compris de nombreuses applications grand public courantes telles que les traitements de texte. En outre, les GPU utilisent une architecture fondamentalement différente ; il faudrait programmer une application spécifiquement pour un GPU pour qu'elle fonctionne, et des techniques significativement différentes sont nécessaires pour programmer les GPU. Ces techniques différentes comprennent de nouveaux langages de programmation, des modifications des langages existants et de nouveaux paradigmes de programmation qui sont mieux adaptés à l'expression d'un calcul en tant qu'opération parallèle à exécuter par de nombreux processeurs de flux. Pour plus d'informations sur les techniques nécessaires à la programmation des GPU, voir les articles de Wikipédia sur traitement en continu y calcul parallèle .

Les GPU modernes sont capables d'effectuer des opérations vectorielles et de l'arithmétique à virgule flottante, les cartes les plus récentes étant capables de manipuler des nombres à virgule flottante en double précision. Des frameworks tels que CUDA et OpenCL permettent d'écrire des programmes pour les GPU, et la nature des GPU les rend plus adaptés aux opérations hautement parallélisables, comme dans l'informatique scientifique, où une série de cartes de calcul GPU spécialisées peut remplacer avantageusement un petit cluster de calcul comme dans le cas de Superordinateurs personnels NVIDIA Tesla . Les consommateurs qui disposent de GPU modernes et qui ont l'expérience de Folding@home peuvent les utiliser pour contribuer à l'effort de recherche. Clients GPU qui peut effectuer des simulations de repliement de protéines à très grande vitesse et contribuer à d'autres travaux dans le cadre du projet (ne manquez pas de lire l'avis de la Commission européenne). FAQs d'abord, notamment ceux liés aux GPU). Les GPU peuvent également permettre une meilleure simulation de la physique dans les jeux vidéo à l'aide de PhysX, accélérer le codage et le décodage vidéo et effectuer d'autres tâches nécessitant des calculs intensifs. Ce sont ces types de tâches que les GPU sont le mieux à même d'exécuter.

AMD est pionnier dans la conception d'un processeur appelé le Unité de traitement accéléré (APU) qui combine des cœurs de CPU x86 classiques avec des GPU. Cette approche permet d'obtenir des performances graphiques largement supérieures à celles des solutions graphiques intégrées à la carte mère (bien qu'elles n'égalent pas celles des GPU discrets plus coûteux), et permet d'obtenir un système compact et peu coûteux offrant de bonnes performances multimédia sans avoir besoin d'un GPU séparé. Les derniers processeurs Intel offrent également des graphiques intégrés sur la puce, bien que les performances compétitives des GPU intégrés soient actuellement limitées aux quelques puces dotées de la technologie Intel Iris Pro Graphics. Au fur et à mesure que la technologie progresse, nous assisterons à un degré croissant de convergence de ces éléments autrefois distincts. AMD envisage un avenir où l'unité centrale et le processeur graphique ne font qu'un, capable de travailler ensemble de manière transparente sur la même tâche. .

Néanmoins, de nombreuses tâches exécutées par les systèmes d'exploitation et les applications des PC sont encore mieux adaptées aux CPU, et beaucoup de travail est nécessaire pour accélérer un programme à l'aide d'un GPU. Étant donné que la plupart des logiciels existants utilisent l'architecture x86, que les GPU nécessitent des techniques de programmation différentes et qu'il leur manque plusieurs fonctions importantes nécessaires aux systèmes d'exploitation, il est très difficile d'effectuer une transition générale du CPU au GPU pour l'informatique quotidienne.

41 votes

Comme cette réponse, je pense que la raison principale est que nous n'avons pas de bons langages de programmation courants pour traiter des architectures parallèles comme celle-ci. Nous avons lutté pendant des décennies pour faire progresser la programmation multi-filière, et les gens appellent toujours le multi-filage "le mal". Malgré cela, les CPU et GPU multi-cœurs sont une réalité, et nous devrons trouver de nouveaux paradigmes de programmation pour y faire face.

0 votes

Il est intéressant de noter qu'Intel a travaillé sur Larrabee (depuis bien trop longtemps), qui est essentiellement une puce contenant un grand nombre de cœurs x86.

0 votes

Excellente réponse pour discuter des raisons matérielles et parler des APU et de la façon dont ils vont changer les choses. Cependant, @Soren donne un très bon point sur l'aspect logiciel. En réalité, c'est la combinaison des problèmes matériels, des problèmes logiciels et du fait que les CPU fonctionnent et que lorsque l'on sait que quelque chose fonctionne, il est difficile de convaincre les gens de le remplacer.

259voto

Lie Ryan Points 4241

Qu'est-ce qui rend le GPU tellement plus rapide que le CPU ?

Le GPU est no plus rapide que l'unité centrale. Le CPU et le GPU ont été conçus avec deux objectifs différents, avec des compromis différents, ils ont donc différents caractéristique de performance. Certaines tâches sont plus rapides dans un CPU tandis que d'autres sont plus rapidement calculées dans un GPU. Le CPU excelle à effectuer des manipulations complexes sur un petit ensemble de données, le GPU excelle à effectuer des manipulations simples sur un grand ensemble de données.

Le GPU est un processeur spécialisé, conçu de telle sorte qu'une seule instruction travaille sur un grand bloc de données (SIMD/Single Instruction Multiple Data), toutes les instructions appliquant la même opération. Travailler par blocs de données est certainement plus efficace que de travailler avec une seule cellule à la fois, car le décodage des instructions est beaucoup moins coûteux. Cependant, travailler dans de grands blocs signifie qu'il y a plus d'unités de travail parallèles, ce qui signifie qu'il faut beaucoup plus de transistors pour mettre en œuvre une seule instruction GPU (ce qui entraîne une contrainte de taille physique, consomme plus d'énergie et produit plus de chaleur).

L'unité centrale est conçue pour exécuter une seule instruction sur une seule donnée aussi rapidement que possible. Puisqu'il n'a besoin de travailler qu'avec une seule donnée, le nombre de transistors nécessaires à la mise en œuvre d'une seule instruction est beaucoup moins important, de sorte qu'un CPU peut se permettre d'avoir un jeu d'instructions plus important, une UAL plus complexe, une meilleure prédiction des branchements, une meilleure architecture virtualisée et des schémas de cache/pipeline plus sophistiqués. Ses cycles d'instruction sont également plus rapides.

La raison pour laquelle nous utilisons toujours le CPU est no parce que x86 est le roi de l'architecture CPU et que Windows est écrit pour x86, la raison pour laquelle nous utilisons toujours le CPU est que le type de tâches qu'un OS doit faire, c'est-à-dire prendre des décisions, est exécuté plus efficacement sur une architecture CPU. Un système d'exploitation doit examiner des centaines de types de données différents et prendre diverses décisions qui dépendent toutes les unes des autres ; ce type de travail ne se parallélise pas facilement, du moins pas dans une architecture SIMD.

À l'avenir, nous assisterons à une convergence entre l'architecture du CPU et du GPU, le CPU acquérant la capacité de travailler sur des blocs de données, par exemple SSE. En outre, comme la technologie de fabrication s'améliore et que les puces deviennent plus petites, le GPU peut se permettre d'implémenter des instructions plus complexes.

23 votes

C'est probablement la meilleure réponse ici. Il est important de comprendre les différences fondamentales entre les deux paradigmes. Pour que les GPU dépassent les CPU, compte tenu des charges de travail actuelles, cela signifie essentiellement qu'un GPU doit se transformer en CPU. Et donc la question est la réponse.

2 votes

+1 pour que ce soit la meilleure réponse. Cette réponse et la réponse acceptée sont toutes deux correctes, mais celle-ci l'explique beaucoup plus clairement.

0 votes

Je suis surpris que personne dans ce fil de discussion n'ait mentionné la surcharge liée à l'envoi de données au GPU - la bande passante limitée des bus PCI-Express rend certaines opérations parallèles sur un GPU beaucoup plus lentes que si elles étaient effectuées sur le CPU. On peut voir un cas simple où la variation de la taille d'une FFT a fait une différence significative dans la performance sur le GPU par rapport au CPU en raison de la surcharge de l'envoi de données, de la mise en place d'un contexte, de la lecture des résultats : stackoverflow.com/a/8687732/303612 Les petites opérations peuvent être effectuées dans le cache des processeurs et la bande passante de la mémoire est largement supérieure à celle de l'architecture PCI-E actuelle.

77voto

Ilya Kochetov Points 11641

Les GPU manquent :

  1. Mémoire virtuelle ( !!!)
  2. Moyens d'adressage des dispositifs autres que la mémoire (par exemple, claviers, imprimantes, stockage secondaire, etc.)
  3. Interruptions

Vous en avez besoin pour pouvoir mettre en œuvre quelque chose qui ressemble à un système d'exploitation moderne.

Ils sont également (relativement) lents en arithmétique de double précision (par rapport à leurs performances en arithmétique de simple précision)*, et sont beaucoup plus grands (en termes de taille du silicium). Les anciennes architectures GPU ne prennent pas en charge les appels indirects (par le biais de pointeurs de fonction) nécessaires à la plupart des programmes généraux, et les architectures plus récentes qui le font le font lentement. Enfin, (comme d'autres réponses l'ont noté), pour les tâches qui ne peuvent pas être parallélisées, les GPU perdent par rapport aux CPU pour la même charge de travail.

EDIT : Veuillez noter que cette réponse a été écrite en 2011 -- la technologie des GPU est un domaine en constante évolution. Les choses pourraient être très différentes selon le moment où vous lisez ceci :P

* Certains GPU ne sont pas lents en arithmétique de double précision, comme les gammes Quadro ou Tesla de NVidia (génération Fermi ou plus récente), ou la gamme FirePro d'AMD (génération GCN ou plus récente). Mais ces produits ne sont pas présents dans les machines de la plupart des consommateurs.

0 votes

@Cicada : Avez-vous une référence à ce sujet ? Dans tous les cas, même si c'est vrai, même le matériel récent ne sera pas performant dans ce cas. (par exemple, il n'aurait pas trop d'avantages en termes de performances par rapport à un CPU - et un désavantage en termes de consommation d'énergie).

3 votes

Oui, les dispositifs Fermi comme vous l'avez dit (avec CUDA 4.0 et sm_20), supportent les sauts indirects (et donc les méthodes virtuelles C++, l'héritage etc).

0 votes

544 GigaFLOPS d'un GPU de 300 $ vieux de 2 ans est lent ?

40voto

user54718 Points 11

Une unité centrale est comme un ouvrier qui va très vite. Un GPU est comme un groupe d'ouvriers clones qui vont vite, mais qui doivent tous faire exactement la même chose à l'unisson (à l'exception du fait que vous pouvez laisser certains clones inactifs si vous le souhaitez).

Que préféreriez-vous avoir comme collègue développeur, un gars super rapide, ou 100 clones rapides qui ne sont pas aussi rapides, mais qui doivent tous effectuer les mêmes actions simultanément ?

Pour certaines actions, les clones sont assez bons, par exemple balayer le sol - ils peuvent chacun en balayer une partie.

Pour certaines actions, les clones sont nuls, par exemple la rédaction du rapport hebdomadaire - tous les clones sauf un restent inactifs pendant qu'un clone rédige le rapport (sinon, vous obtenez 100 copies du même rapport).

4 votes

Est-ce que je pourrais même avoir... les deux ?

24 votes

@Kevin : Oui, mais vous aurez besoin d'un ordinateur avec les deux a CPU y un GPU ! Si seulement une telle chose existait !

4 votes

Grande analogie. Je m'en souviendrai.

24voto

Krish Points 111

Parce que les GPU sont conçus pour faire beaucoup de petites choses à la fois, et les CPU sont conçus pour faire une seule chose à la fois. Si votre processus peut être rendu massivement parallèle, comme le hachage, le GPU est plus rapide de plusieurs ordres de grandeur, sinon il ne le sera pas.

Votre CPU peut calculer un hash beaucoup, beaucoup plus rapidement que votre GPU, mais le temps que votre CPU le fasse, votre GPU pourrait être en train de faire plusieurs centaines de hashs. Les GPU sont conçus pour faire beaucoup de choses en même temps, tandis que les CPU sont conçus pour faire une seule chose à la fois, mais très rapidement.

Le problème est que les CPU et les GPU sont des solutions très différentes à des problèmes très différents, il y a un peu de chevauchement mais généralement ce qui est dans leur domaine reste dans leur domaine. Nous ne pouvons pas remplacer le CPU par un GPU parce que le CPU est déjà en train de faire son travail bien mieux qu'un GPU ne le pourrait jamais, tout simplement parce qu'un GPU n'est pas conçu pour faire ce travail, alors qu'un CPU l'est.

Une petite remarque, cependant : s'il était possible de supprimer le CPU et de n'avoir qu'un GPU, ne pensez-vous pas que nous le renommerions ? :)

0 votes

Je pense que la plupart des processeurs modernes sont conçus pour faire 2, 4 ou 8 choses à la fois.

0 votes

@danielcg25 : Et la plupart des GPU modernes sont conçus pour faire 256, 512, 1024 choses à la fois (Le GTX 680 a 1536 cœurs CUDA). Chaque cœur de processeur individuel est une entité distincte sur le plan conceptuel, mais ce n'est pas le cas d'un GPU.

0 votes

@danielcg25 : Je suis conscient, mais un commentaire avec une incompréhension fondamentale (bien qu'intentionnelle) de la réponse pourrait être nuisible si quelqu'un le lisait sans déjà connaître le sujet. "Être un con" dans ce sens n'est pas vraiment apprécié sur SE car cela diminue le rapport signal/bruit.

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