2011-07-10 13:31:41 +0000 2011-07-10 13:31:41 +0000
380
380

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

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

Réponses (15)

394
394
394
2011-07-10 14:00:49 +0000

TL;DR réponse: 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 ne possède pas les caractéristiques nécessaires aux systèmes d'exploitation modernes, ils ne sont pas appropriés pour effectuer la plupart des traitements dans l'informatique quotidienne. Ils sont plus adaptés aux opérations de calcul intensif telles que le traitement vidéo et les simulations physiques.


GPGPU est un concept encore relativement nouveau. Les GPU étaient initialement utilisés pour le rendu de graphiques uniquement ; 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 des capacités de calcul pour les GPU afin qu'ils puissent traiter simultanément de nombreux flux de données parallèles, quelles que soient ces données. Bien que les GPU puissent avoir des centaines, voire des milliers de processeurs de flux, ils fonctionnent chacun plus lentement qu'un cœur de CPU et ont moins de fonctionnalités (même s'ils sont Turing complete et peuvent être programmés pour exécuter n'importe quel programme qu'un CPU peut exécuter). Parmi les caractéristiques manquantes des GPU, on trouve 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 à différentes tâches. Un GPU peut traiter de grandes quantités de données dans de nombreux flux, en effectuant des opérations relativement simples sur ceux-ci, mais il est mal adapté à un traitement lourd ou complexe sur un seul ou quelques flux de données. Un CPU est beaucoup plus rapide par cœur (en termes d'instructions par seconde) et peut effectuer plus facilement des opérations complexes sur un seul ou quelques flux de données, mais ne peut pas traiter efficacement de nombreux flux simultanément.

En conséquence, les GPU ne sont pas adaptés pour traiter des tâches qui ne bénéficient pas de manière significative ou qui 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 sensiblement différentes sont nécessaires pour programmer les GPU. Ces différentes techniques 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 comme une opération parallèle à effectuer par de nombreux processeurs de flux. Pour plus d'informations sur les techniques nécessaires à la programmation des GPU, voir les articles de Wikipedia sur le traitement en continu et le calcul parallèle .

Les GPU modernes sont capables d'effectuer des opérations vectorielles et de l'arithmétique en virgule flottante, avec les dernières cartes capables de manipuler des nombres à virgule flottante de double précision. Les cadres 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 le calcul scientifique, où une série de cartes de calcul GPU spécialisées peut remplacer de manière viable une petite grappe de calcul comme dans NVIDIA Tesla Personal Supercomputers . Les consommateurs disposant de GPU modernes et expérimentés dans Folding@home peuvent les utiliser pour contribuer avec les clients GPU , qui peuvent effectuer des simulations de pliage de protéines à très grande vitesse et contribuer davantage au projet (assurez-vous de lire d'abord les FAQ , en particulier celles relatives aux GPU). Les GPU peuvent également permettre une meilleure simulation de la physique dans les jeux vidéo en utilisant PhysX, accélérer le codage et le décodage vidéo et effectuer d'autres tâches de calcul intensives. Ce sont ces types de tâches que les GPU sont les plus aptes à effectuer.

AMD est le pionnier d'une conception de processeur appelée unité de traitement accéléré (APU) qui combine les cœurs de CPU x86 conventionnels avec les GPU. Cette approche permet d'obtenir des performances graphiques largement supérieures à celles des solutions graphiques intégrées aux cartes mères (bien qu'elles ne soient pas comparables aux GPU discrets plus coûteux), et permet d'obtenir un système compact et peu coûteux avec 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 puce, bien que les performances concurrentielles des GPU intégrés soient actuellement limitées aux quelques puces équipées de l'Intel Iris Pro Graphics. Au fur et à mesure des progrès technologiques, nous assisterons à un degré croissant de convergence de ces pièces autrefois séparées. AMD envisage un avenir où le CPU et le GPU ne feront qu'un, capable de travailler ensemble de manière transparente sur une même tâche .

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

257
257
257
2011-07-10 20:22:09 +0000

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

Le GPU n'est pas plus rapide que le CPU. Le CPU et le GPU sont conçus avec deux objectifs différents, avec des compromis différents, ils ont donc des caractéristiques de performance différentes. Certaines tâches sont plus rapides dans un CPU tandis que d'autres sont plus rapides 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 CPU à usage spécifique, conçu pour qu'une seule instruction fonctionne sur un grand bloc de données (SIMD/Single Instruction Multiple Data), toutes appliquant la même opération. Travailler en 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 plus rapide. Cependant, travailler en grands blocs signifie qu'il y a plus d'unités de travail parallèles, donc il utilise beaucoup plus de transistors pour mettre en œuvre une seule instruction du GPU (ce qui entraîne une contrainte de taille physique, utilise plus d'énergie et produit plus de chaleur).

Le CPU est conçu pour exécuter une seule instruction sur une seule donnée aussi rapidement que possible. Comme elle ne doit travailler qu'avec une seule donnée, le nombre de transistors requis pour mettre en œuvre une seule instruction est beaucoup moins important, de sorte qu'une CPU peut se permettre d'avoir un jeu d'instructions plus important, une ALU plus complexe, une meilleure prédiction de branche, une meilleure architecture virtualisée et des schémas de cache/pipeline plus sophistiqués. Ses cycles d'instructions sont également plus rapides.

La raison pour laquelle nous utilisons encore le CPU est non parce que x86 est le roi de l'architecture CPU et que Windows est écrit pour x86, la raison pour laquelle nous utilisons encore le CPU est que le type de tâches qu'un OS doit effectuer, 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 tâche ne se parallélise pas facilement, du moins pas dans une architecture SIMD.

À l'avenir, nous assisterons à une convergence entre l'architecture CPU et GPU, car le CPU acquiert la capacité de travailler sur des blocs de données, par exemple SSE. En outre, à mesure que la technologie de fabrication s'améliore et que les puces deviennent plus petites, le GPU peut se permettre de mettre en œuvre des instructions plus complexes.

77
77
77
2011-07-10 21:17:30 +0000

Manque de GPU :

  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 tout ce 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 de silicium). Les architectures GPU plus anciennes ne prennent pas en charge les appels indirects (par le biais de pointeurs de fonction) nécessaires à la plupart des programmes d'usage général, et les architectures plus récentes le font lentement. Enfin, (comme d'autres réponses l'ont noté), pour les tâches qui ne peuvent être parallélisées, les GPU perdent par rapport aux CPU à charge de travail égale.

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

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

39
39
39
2011-07-11 15:39:21 +0000

Une unité centrale est comme un travailleur qui va super vite. Un GPU est comme un groupe de travailleurs clones qui vont vite, mais qui doivent tous faire exactement la même chose à l'unisson (à l'exception de certains clones qui peuvent rester inactifs si vous le souhaitez)

Lequel 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 plutôt bons, par exemple balayer le sol - ils peuvent chacun en balayer une partie. Pour d'autres actions, les clones sont nuls, par exemple écrire le rapport hebdomadaire - tous les clones sauf un restent inactifs pendant qu'un clone écrit le rapport (sinon vous n'avez que 100 copies du même rapport).

24
24
24
2011-07-10 17:51:46 +0000

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

Votre CPU peut calculer un hachage beaucoup, beaucoup plus vite que votre GPU - mais le temps que votre CPU met à le faire, votre GPU pourrait être à mi-chemin de plusieurs centaines de hachages. Les GPU sont conçus pour faire beaucoup de choses en même temps, et les CPU sont conçus pour faire une 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 là, à faire son travail bien mieux qu'un GPU ne pourrait jamais le faire, tout simplement parce qu'un GPU n'est pas conçu pour faire le travail, et qu'un CPU l'est.

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

15
15
15
2011-07-10 17:57:36 +0000

Vous vous demandez vraiment pourquoi nous n'utilisons pas les GPU comme les architectures des CPU?

Le GPU est juste un CPU spécialisé d'une carte graphique. Nous prêtons le calcul non graphique GPU parce que les CPU d'usage général ne sont pas à la hauteur en exécution parallèle et en virgule flottante.

Nous utilisons en fait différentes architectures CPU (plus GPU-ish). Par exemple, les processeurs Niagara sont assez multitâches. SPARC T3 exécutera 512 threads simultanés.

12
12
12
2011-07-10 15:55:56 +0000

Je me trompe peut-être terriblement, et je ne m'exprime pas ou peu sur le sujet, mais voici ce que je pense :

  • Je crois que chaque unité d'exécution GPU (“core”) a un espace d'adressage très limité par rapport à un CPU.

  • Les unités d'exécution GPU ne peuvent pas traiter efficacement les branchements. J'ai toujours pensé que les unités d'exécution GPU étaient conçues comme les “SPE” de la Playstation 3 : elles veulent recevoir un bloc de données, y effectuer un certain nombre d'opérations séquentielles, puis cracher un autre bloc de données, rincer, répéter. Ils n'ont pas autant de mémoire adressable que le “CPE” principal, mais l'idée est de dédier chaque “SPE” à une tâche spécifique et séquentielle. La sortie d'une unité peut alimenter l'entrée d'une autre unité.

Les unités d'exécution ne fonctionnent pas bien si elles essaient d’“analyser” les données et de prendre un tas de décisions basées sur ce que sont ces données. Ces “blocs de données” peuvent faire partie d'un flux, comme par exemple une liste de sommets d'une table d'état de jeu, des données MPEG d'un disque, etc.

Si quelque chose ne correspond pas à ce modèle de “streaming”, alors vous avez une tâche qui ne peut être efficacement paralysée et le GPU n'est pas nécessairement la meilleure solution pour cela. Un bon exemple est le traitement de choses basées sur des “événements externes” comme le clavier, le joystick ou l'entrée réseau. Il n'y a pas beaucoup de choses qui ne correspondent pas à ce modèle, mais il y en aura toujours quelques-unes.

7
7
7
2011-07-12 04:36:14 +0000

Il n'y a rien à dire sur la vitesse ou le but de l'horloge. Ils sont tous deux capables d'accomplir la plupart des tâches, sinon toutes, de manière égale ; cependant, certains sont légèrement mieux adaptés à certaines tâches qu'à d'autres.

Il y a eu un très vieux débat sur la question de savoir s'il est préférable d'avoir beaucoup de noyaux muets ou un petit groupe de noyaux très intelligents. Cela remonte facilement aux années 80.

A l'intérieur d'un CPU, il y a beaucoup de calculs possibles. Les cœurs intelligents sont capables d'effectuer de nombreux calculs différents en même temps (un peu comme un multicœur, mais ce n'est pas compliqué ; voir Parallélisme au niveau des instructions). Un cœur intelligent peut effectuer plusieurs calculs en même temps (addition, soustraction, multiplication, division, fonctionnement de la mémoire) mais un seul à la fois ; de ce fait, ils sont physiquement plus grands (et donc beaucoup plus chers) que les cœurs plus bêtes.

Un cœur bête est beaucoup plus petit et peut donc en ajouter plus à une seule puce mais ne peut pas effectuer autant de calculs simultanément. Les architectures multicœurs fonctionnent bien avec les graphiques car les calculs peuvent facilement être répartis sur des centaines de cœurs, mais cela dépend également de la qualité du code et du fait qu'un autre code s'appuie ou non sur le résultat d'un calcul. Pour plus d'informations, lisez cet article sur la conception des processeurs :

Modern Microprocessor - A 90 Minute guide

http://www.lighterra.com/papers/modernmicroprocessors/

6
6
6
2011-07-15 11:44:05 +0000

J'aimerais aborder un point syntaxique : Les termes CPU et GPU sont des noms fonctionnels et non des noms architecturaux.

Si un ordinateur devait utiliser un GPU comme processeur principal, il deviendrait alors une “unité centrale de traitement” (CPU), indépendamment de l'architecture et de la conception.

5
5
5
2011-07-10 14:57:18 +0000

Il est important de garder à l'esprit qu'il n'y a pas de ligne de démarcation magique dans l'espace architectural qui fait d'un processeur le “central” et d'un autre le “graphique”. (Eh bien, certains GPU sont peut-être trop paralysés pour être totalement généraux, mais ce ne sont pas ceux dont il est question ici)

La distinction est une de la façon dont ils sont installés sur la carte et des tâches qui leur sont confiées. Bien sûr, nous utilisons un processeur universel (ou un ensemble de processeurs universels) pour le principal moteur de données, et une unité spéciale, parallélisée et profondément tubulaire pour que les choses (comme les graphiques) puissent en tirer le meilleur parti.

La plupart des astuces qui ont été utilisées pour que les GPU fassent leur travail très rapidement ont d'abord été développées par des personnes essayant de fabriquer des CPU plus rapides et meilleurs. Il s'avère que Word, Excel, Netscape et bien d'autres choses pour lesquelles les gens utilisent leurs ordinateurs non seulement ne profitent pas pleinement des fonctionnalités offertes par les puces graphiques spécialisées, mais fonctionnent même plus lentement sur ces architectures parce qu'une grande partie de la branche cause des débordements (très coûteux et lents).

3
3
3
2015-06-07 11:53:13 +0000

La raison pour laquelle nous continuons à utiliser les CPU est que les CPU et les GPU ont tous deux leurs avantages uniques. Voir mon article suivant, accepté dans ACM Computing Surveys 2015, qui fournit une discussion concluante et complète sur l'abandon du “débat CPU vs GPU” au profit du “calcul collaboratif CPU-GPU”. A Survey of CPU-GPU Heterogeneous Computing Techniques

3
3
3
2011-07-17 16:44:16 +0000

Pour une raison simple : la plupart des applications ne sont pas multi-fils/vectorisées.

Les cartes graphiques reposent fortement sur le multi-fil, du moins dans le concept.

Comparer une voiture avec un seul moteur, une voiture avec un moteur plus petit par roue. Avec cette dernière voiture, vous devez commander tous les moteurs, ce qui n'a pas été pris en compte du point de vue de la programmation du système.

Avec la fusion AMD cependant, cela changera la façon dont nous devrons utiliser la puissance de traitement : soit vectorisée, soit rapide pour un seul fil.

3
3
3
2011-07-10 21:35:07 +0000

Le but de l'existence d'un GPU était de soulager le CPU des calculs graphiques coûteux qu'il effectuait à l'époque. En les combinant à nouveau en un seul processeur, nous reviendrions au point de départ.

2
2
2
2016-07-01 11:46:23 +0000

lespus sont de bons processeurs de flux. on peut considérer le traitement de flux comme la multiplication séquentielle d'un long tableau de nombres. lespus ont également des capacités de traitement de flux (appelées extensions SIMD) mais on ne peut pas implémenter toute la logique de programmation comme traitement de flux, et les compilateurs ont la possibilité de créer des btyecodes qui utilisent les instructions simd chaque fois que c'est possible.

tout n'est pas un tableau de nombres. les images et les vidéos le sont, peut-être aussi le son (il y a des encodeurs opencl ici et là). Un inconvénient est que vous ne pouvez pas tout décharger sur gpus dans les jeux parce que cela créerait des bégaiements, gpus est occupé par les graphiques et est censé être le goulot d'étranglement du système lors des jeux. la solution optimale serait d'utiliser pleinement tous les composants d'un ordinateur. ainsi, par exemple, le moteur physx de nvidia, par défaut, effectue des calculs sur l'ordinateur lorsque celui-ci est pleinement utilisé.

2
2
2
2015-11-16 15:42:30 +0000

En d'autres termes, le GPU peut être comparé à une remorque dans la voiture. Comme d'habitude, le coffre est suffisant pour la majorité des gens, sauf dans les cas où ils achètent quelque chose de très grand. Dans ce cas, ils peuvent avoir besoin d'une remorque. Il en va de même avec le GPU, car il suffit généralement d'avoir un processeur ordinaire qui accomplira la majorité des tâches. Mais si vous avez besoin de calculs intensifs dans de nombreux threads, alors vous pouvez avoir besoin du GPU