Pourquoi utilisons-nous toujours des processeurs au lieu de GPU?

373

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

aune
la source
3
Comment savoir quelles réponses contiennent des informations correctes? Devrais-je attendre que les autres votants répondent? Je pense avoir été trop pressé en acceptant une réponse: O
ell
14
Il y a des réponses récentes @ell maintenant, qui ne contiennent pas de "désinformation". Ils se lèvent progressivement vers le haut avec des votes en hausse en raison du mécanisme de marché efficace du StackExchange merveilleusement conçu ;-) Je suggérerais d'attendre un peu plus longtemps avant d'accepter une réponse. On dirait que vous faites très prudemment cela. C'est une bonne question, au fait. Cela peut sembler évident, mais ce n'est pas du tout. Merci de le demander!
Ellie Kesselman
124
Un peu comme si on demandait "Si le Boeing 747 est plus rapide et plus économe en carburant, pourquoi continuons-nous de conduire des voitures"?
vartec
7
Non, car ce n'est pas RISC contre CISC. C'est l'un des autres fondamentaux de l'informatique, légèrement déguisé. Il est « Pourquoi avons-nous délester le travail du processeur central sur les processeurs d' E / S? » .
JdeBP
5
@vartec: Je pense qu'une analogie légèrement meilleure pourrait être entre les bus et les taxis. Si quarante personnes veulent toutes aller du même endroit au même endroit, un bus sera beaucoup plus efficace. S'il y a quarante personnes dont les origines et les destinations souhaitées sont largement dispersées, même un seul taxi peut être aussi bon qu'un bus, et pour le coût du bus, il est possible d'avoir plusieurs taxis.
Supercat

Réponses:

388

Réponse de TL; DR: les GPU ont beaucoup plus de cœurs de processeur que de processeurs, mais comme chaque cœur de processeur fonctionne beaucoup plus lentement qu'un cœur de processeur et ne possède pas les fonctionnalités nécessaires aux systèmes d'exploitation modernes, ils ne conviennent pas à la plupart des traitements quotidiens l'informatique. Ils conviennent mieux aux opérations gourmandes en ressources informatiques telles que le traitement vidéo et les simulations physiques.


GPGPU est encore un concept relativement nouveau. Les GPU étaient initialement utilisés pour le rendu des graphiques; à mesure que la technologie évoluait, le grand nombre de cœurs des GPU par rapport aux CPU était 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 leurs 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 processeur et ont moins de fonctionnalités (même s'ils sont complets et peuvent être programmés pour exécuter tout programme qu'un processeur peut exécuter). Les fonctionnalités manquantes dans les GPU incluent les interruptions et la mémoire virtuelle, nécessaires à la mise en œuvre d'un système d'exploitation moderne.

En d'autres termes, les CPU et les GPU ont des architectures très 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, mais ne convient pas au traitement lourd ou complexe sur un ou plusieurs flux de données. Un processeur est beaucoup plus rapide sur chaque base (en termes d'instructions par seconde) et peut effectuer plus facilement des opérations complexes sur un ou plusieurs flux de données, mais ne peut pas gérer efficacement plusieurs flux simultanément.

Par conséquent, les GPU ne sont pas adaptés à la gestion de tâches ne bénéficiant pas ou ne pouvant pas être mises en parallèle de manière significative, y compris de nombreuses applications grand public courantes telles que les traitements de texte. De plus, les GPU utilisent une architecture fondamentalement différente. il faudrait programmer une application spécifiquement pour un GPU afin que celui-ci fonctionne, et des techniques très différentes sont nécessaires pour programmer les GPU. Ces différentes techniques incluent de nouveaux langages de programmation, des modifications de langages existants et de nouveaux paradigmes de programmation mieux adaptés à l'expression d'un calcul en tant qu'opération parallèle exécutée par de nombreux processeurs de flux. Pour plus d'informations sur les techniques nécessaires à la programmation de GPU, consultez les articles de Wikipedia sur le traitement de flux et le calcul parallèle .

Les GPU modernes sont capables d'effectuer des opérations vectorielles et de l'arithmétique à virgule flottante, avec les dernières cartes capables de manipuler des nombres à virgule flottante double précision. Des frameworks tels que CUDA et OpenCL permettent d’écrire des programmes pour les GPU, et leur nature les rendent plus adaptés aux opérations hautement parallélisables, telles que le calcul scientifique, où une série de cartes de calcul GPU spécialisées peut remplacer utilement un petit 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 aux clients GPU , qui peuvent effectuer des simulations de repliement de protéines à des vitesses très élevées et contribuer davantage de travail au projet (assurez-vous de lire la FAQd’abord, en particulier ceux liés aux GPU). Les GPU peuvent également permettre une meilleure simulation physique dans les jeux vidéo avec PhysX, accélérer l'encodage et le décodage vidéo et effectuer d'autres tâches gourmandes en ressources de calcul. Ce sont ces types de tâches que les GPU sont les mieux à même de réaliser.

AMD est à l’avant-garde d’une conception de processeur appelée unité de traitement accélérée (APU) qui combine des cœurs de processeur x86 classiques avec des GPU. Cette approche permet des performances graphiques largement supérieures aux solutions graphiques intégrées à la carte mère (bien qu’elles ne puissent pas être comparées à des GPU discrets plus onéreux), et permettent de créer un système compact et économique offrant de bonnes performances multimédias sans recourir à un GPU séparé. Les derniers processeurs Intel offrent également des graphiques intégrés sur puce, bien que les performances du GPU intégré concurrentiel soient actuellement limitées aux quelques puces avec Intel Iris Pro Graphics. Au fur et à mesure que la technologie progresse, nous verrons un degré croissant de convergence de ces composants autrefois distincts. AMD envisageun futur où CPU et GPU 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 PC conviennent toujours mieux aux processeurs, et il faut encore beaucoup de travail pour accélérer un programme à l’aide d’un GPU. Étant donné que de nombreux logiciels utilisent l’architecture x86 et que les GPU exigent différentes techniques de programmation et qu’il leur manque plusieurs fonctionnalités importantes nécessaires aux systèmes d’exploitation, il est très difficile de passer d’un processeur à l’autre à un GPU.

bwDraco
la source
39
À l'instar de cette réponse, je pense que la raison principale est que nous ne disposons pas de bons langages de programmation de flux principal pour gérer des architectures parallèles comme celle-ci. Nous avons lutté pendant des décennies pour faire avancer la programmation multi-threadée, et les gens appellent encore, multi threading "le mal". Malgré le fait que les processeurs multicœurs et les GPU soient une réalité, nous devrons proposer de nouveaux paradigmes de programmation pour gérer ce problème.
Soren
Il est à noter qu'Intel travaille sur l' architecture Larrabee (depuis trop longtemps), qui est essentiellement une puce avec un nombre considérable de cœurs x86.
Chris S
Excellente réponse pour discuter des raisons matérielles et des APU et comment ils vont changer cela. Cependant, @Soren donne un très bon point du côté logiciel. En réalité, il s’agit de la combinaison de problèmes matériels, logiciels et du fait que les processeurs fonctionnent et que l’on sait que quelque chose fonctionne, il est difficile d’inciter les gens à le remplacer.
Nich Del
3
"Nous ne disposons pas de bons langages de programmation de flux principal pour gérer des architectures parallèles comme celle-ci." - Haskell, OCaml, Scheme, F #, Erlang et pratiquement tous les autres langages de programmation fonctionnels traitent très bien le multithreading. Tous ceux que j'ai mentionnés sont grand public.
BlueRaja - Danny Pflughoeft
1
@BlueRaja - nous connaissons ces langues, votre définition du flux principal doit être différente de la mienne :-)
Soren le
252

Qu'est-ce qui rend le GPU beaucoup plus rapide que le processeur?

Le GPU n'est pas plus rapide que le processeur. Le processeur et le processeur graphique sont conçus avec deux objectifs différents, avec des compromis différents, de sorte qu'ils ont des caractéristiques de performances différentes . Certaines tâches sont plus rapides dans un processeur alors que d'autres sont plus rapides à calculer dans un GPU. Le processeur excelle dans les manipulations complexes sur un petit ensemble de données, le GPU excelle dans les manipulations simples sur un grand ensemble de données.

Le GPU est un processeur spécial, conçu pour qu'une seule instruction fonctionne sur un bloc de données volumineux (SIMD / Single Instruction Multiple Data), qui appliquent tous la même opération. Travailler dans des blocs de données est certainement plus efficace que de travailler avec une seule cellule à la fois, car le décodage des instructions nécessite beaucoup moins de temps système. Toutefois, travailler dans de grands blocs signifie qu'il y a plus d'unités de travail parallèles, de sorte qu'il utilise beaucoup plus de transistors. d'implémenter une seule instruction GPU (contrainte de taille physique, utilisation de plus d'énergie et plus de chaleur).

La CPU est conçue pour exécuter une instruction unique sur une donnée unique aussi rapidement que possible. Comme il ne faut que travailler avec une seule donnée, le nombre de transistors requis pour mettre en oeuvre une seule instruction est beaucoup moins important, de sorte qu'un processeur peut se permettre de disposer d'un jeu d'instructions plus grand, d'une ALU plus complexe, d'une meilleure prédiction de branche, d'une meilleure virtualisation. architecture, et un système de cache / pipeline plus sophistiqué. Ses cycles d’instruction sont également plus rapides.

La raison pour laquelle nous utilisons toujours le processeur n’est pas due au fait que x86 est le roi de l’architecture de processeur et que Windows est écrit pour x86; est exécuté plus efficacement sur une architecture de processeur. Un système d'exploitation doit examiner des centaines de types de données et prendre des 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.

Nous verrons à l'avenir une convergence entre l'architecture de la CPU et celle du GPU, à mesure que celle-ci acquiert la capacité de travailler sur des blocs de données, par exemple SSE. De plus, à mesure que la technologie de fabrication s'améliore et que les puces deviennent de plus en plus petites, le processeur graphique peut se permettre d'implémenter des instructions plus complexes.

Lie Ryan
la source
23
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, considérant les charges de travail actuelles, cela signifie essentiellement qu’un GPU doit se transformer en CPU. Et donc la question est la réponse.
surfasb
2
+1 pour que ce soit la meilleure réponse. Ceci et la réponse acceptée sont corrects, mais celui-ci l'explique beaucoup plus clairement.
Je suis surpris que personne dans ce fil n'ait mentionné la surcharge liée à l'envoi de données au GPU - une bande passante limitée sur les bus PCI-Express rend certaines opérations parallèles sur un GPU beaucoup plus lentes qu'elles ne l'étaient sur le CPU. On peut voir un cas simple où la variation de la taille d’une FFT a eu un impact significatif sur les performances du processeur graphique par rapport au processeur en raison de la surcharge liée à l’envoi de données, à la configuration d’un contexte et à la lecture des résultats: stackoverflow.com/a/8687732/303612 Des opérations plus petites peuvent être effectuées en cache sur les processeurs, et la bande passante mémoire est largement supérieure à l'architecture PCI-E actuelle
Dr. Andrew Burnett-Thompson
1
@ Dr. AndrewBurnett-Thompson: c'est parce que cela n'a rien à voir avec la question. Actuellement, le GPU est considéré comme une unité de traitement auxiliaire, c’est pourquoi le transfert de données depuis / vers un GPU est nécessaire et coûteux. Si nous traitons le processeur graphique comme l'unité de traitement de première classe, il n'y aura aucun besoin de marshaler des données entre la mémoire principale et la mémoire du processeur graphique.
Lie Ryan
1
Pas optimiste, ce n'est pas une surcharge de bande passante nulle. Si un processeur avec une architecture GPU exécute l'intégralité de l'émission, il n'y a rien à déplacer, la mémoire du GPU est la mémoire principale. On ne parle pas de frais généraux de transfert, car il n’ya pas de transfert. Ce n’est pas une hypothèse d’ailleurs, les APU d’AMD utilisent une architecture de système hétérogène (HSA) avec une mémoire principale unifiée qui permet la copie zéro entre le processeur et le processeur graphique.
Lie Ryan
75

Les GPU manquent:

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

Vous avez besoin de ceux-ci pour pouvoir mettre en œuvre tout ce qui ressemble à un système d'exploitation moderne.

Ils sont également (relativement) lents en arithmétique en double précision (comparés à leurs performances arithmétiques en simple précision) * et sont beaucoup plus grands (en taille de 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 lentement. Enfin, (comme d'autres réponses l'ont noté), pour les tâches qui ne peuvent pas être mises en parallèle, les GPU perdent par rapport aux CPU avec la même charge de travail.

EDIT : Veuillez noter que cette réponse a été écrite en 2011 - La technologie 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 en double précision, tels que les lignes NVidia Quadro ou Tesla (génération Fermi ou plus récente), ou la ligne FirePro d'AMD (génération GCN ou plus récente). Mais ceux-ci ne sont pas dans la plupart des machines des consommateurs.

Billy Oneal
la source
@Cicada: Avez-vous une référence pour cela? Dans tous les cas, même si cela est vrai, même le matériel récent ne fonctionnera pas bien dans ce cas. (par exemple n'aurait pas trop d'avantages sur un processeur - et un inconvénient de consommation d'énergie)
Billy ONeal
3
Oui, les périphériques Fermi, comme vous l'avez dit (avec CUDA 4.0 et sm_20), prennent en charge les sauts indirects (et donc les méthodes virtuelles C ++, l'héritage, etc.).
Laitue en colère
544 GigaFLOPS d’un GPU de 300 $ âgé de 2 ans est lent?
Ben Voigt le
2
@Ben: Vous n'obtenez ce genre de performance que dans les applications parallèles de données. Les opérations séquentielles générales sont un jeu de balle complètement différent. (Ce n'est qu'avec les 1600 cœurs de cette puce fonctionnant en parallèle, exécutant essentiellement la même instruction encore et encore ... et même c'est une performance théorique plutôt qu'une performance réelle)
Billy ONeal
@Billy: Mais c'est de la lenteur sur une classe d'algorithmes particulière, pas de la lenteur sur l'arithmétique en double précision (c'est ce que vous avez affirmé). (Et les processeurs n'atteignent généralement pas les rendements de référence non plus)
Ben Voigt le
37

Un processeur est comme un travailleur qui va très vite. Un GPU est comme un groupe de clones qui vont vite, mais qui doivent tous faire exactement la même chose à l'unisson (à l'exception du fait que certains clones restent inactifs si vous le souhaitez)

Que préférez-vous avoir en tant que développeur, un gars super rapide ou 100 clones rapides qui ne sont pas aussi rapides, mais qui doivent tous exécuter les mêmes actions simultanément?

Pour certaines actions, les clones sont plutôt bons, par exemple balayer le sol - chacun peut en balayer une partie.

Pour certaines actions, les clones sentent mauvais, par exemple rédiger le rapport hebdomadaire - tous les clones sauf un restent inactifs pendant qu'un clone écrit le rapport (sinon, vous obtenez seulement 100 copies du même rapport).

John Robertson
la source
4
Pourrais-je même avoir ... les deux?
Kevin Panko
22
@ Kevin: Oui, mais vous aurez besoin d'un ordinateur doté à la fois d' un processeur et d' un GPU! Si seulement il y avait une telle chose!
Joachim Sauer le
3
Grande analogie. Je m'en souviendrai.
Mai
23

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

Votre processeur peut calculer un hachage beaucoup, beaucoup plus rapidement que votre GPU - mais le temps que cela prend à votre processeur, votre GPU pourrait être à mi-chemin sur plusieurs centaines de hachages. Les GPU sont conçus pour faire beaucoup de choses en même temps, tandis que 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 pour des problèmes très différents, il y a un peu de chevauchement, mais ce qui reste dans leur domaine reste dans leur domaine. Nous ne pouvons pas remplacer le processeur par un processeur graphique, car celui-ci fait son travail bien mieux qu’un processeur graphique, tout simplement parce qu’un processeur graphique n’est pas conçu pour faire le travail, mais un processeur.

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

Phoshi
la source
Je pense que la plupart des processeurs modernes sont conçus pour faire 2, 4 ou 8 choses à la fois.
danielcg
@ danielcg25: Et la plupart des GPU modernes sont conçus pour effectuer 256, 512, 1024 opérations à la fois (la GTX 680 possède 1536 cœurs CUDA). Chaque cœur de processeur est une entité distincte sur le plan conceptuel, mais ce n'est pas le cas d'un GPU.
Phoshi
@ danielcg25: Je suis au courant, mais un commentaire avec une incompréhension fondamentale (même intentionnelle) de la réponse pourrait être préjudiciable si quelqu'un le lisait sans déjà connaître le sujet. "Etre un âne" dans ce sens n'est pas vraiment apprécié sur SE car il diminue le rapport signal: bruit.
Phoshi
Je fournissais juste quelques informations. De nos jours, la plupart des ordinateurs sont capables de traiter 2 à 8 choses à la fois. Certains processeurs peuvent faire encore plus que cela. Il n’est toujours pas proche des GPU qui font des centaines de choses à la fois.
danielcg
@ danielcg25: C'est un type de traitement différent, cependant, c'est de quoi parle la question. Chaque cœur de processeur est effectivement séparé et fonctionne avec ses propres blocs de données et ses propres processus. Chaque cœur de processeur exécute une tâche distincte, distincte des autres, et ne monte pas de manière linéaire vers le haut - un octo-cœur n’est pas deux fois plus utile qu’un quad-core n’est pas deux fois plus utile qu’un dual core. Les cœurs GPU, quant à eux, effectuent la même tâche sur différentes données et effectuent une mise à l’échelle linéaire. Il est évident que des processeurs multicœurs existent, mais ce n'est pas la même chose .
Phoshi
14

Voulez-vous vraiment savoir pourquoi nous n'utilisons pas de GPU comme des architectures dans les CPU?

Le GPU est juste le processeur spécialisé d'une carte graphique. Nous prêtons des calculs non graphiques sur GPU car les processeurs à usage général ne sont tout simplement pas à la hauteur des exécutions en parallèle et en virgule flottante.

Nous utilisons actuellement différentes architectures de processeur (plus de GPU). Par exemple, les processeurs de Niagara sont multitâches. SPARC T3 exécutera 512 threads simultanés.

jkj
la source
Pourquoi un vote négatif?
jkj
3
Je suppose que la dernière ligne, car c'est tout simplement faux. En fait, je ne peux penser qu'à un seul système d'exploitation traditionnel x86; et même celui-ci a été porté sur des processeurs alpha et ARM, mais n’est pas commercialement offert pour le moment.
Javier
D'accord. Suppression de la dernière partie de mon opinion sur la prise en charge par les systèmes d'exploitation classiques empêchant toute modification des nouvelles architectures. Peut-être pas dans le champ de la réponse.
Jkj
11

Je me trompe peut-être horriblement ici et je parle avec peu ou pas de pouvoir en la matière, mais voici ce qui suit:

  • Je pense que chaque unité d’exécution du processeur graphique ("core") a un espace d’adresse très limité comparé à un CPU.

  • Les unités d'exécution GPU ne peuvent pas gérer efficacement les branches.

  • Les unités d'exécution GPU ne prennent pas en charge les interruptions matérielles de la même manière que les processeurs.

J'ai toujours pensé que les unités d'exécution GPU devaient ressembler aux "SPE" de la Playstation 3: elles souhaitent recevoir un bloc de données, y exécuter un certain nombre d'opérations séquentielles, puis cracher un autre bloc de données. données, rincer, répéter. Ils ne possèdent pas autant de mémoire adressable que le "CPE" principal, mais l’idée est de dédier chaque "SPE" à une tâche séquentielle spécifique. 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 ensemble de décisions en fonction de la nature de ces données.

Ces "blocs de données" peuvent faire partie d'un flux, tel qu'une liste de sommets d'une table d'état d'un jeu, des données MPEG d'un disque, etc.

Si quelque chose ne convient pas à ce modèle de "diffusion en continu", vous avez une tâche qui ne peut pas être comparée efficacement et le processeur graphique n'est pas nécessairement la meilleure solution pour cela. Un bon exemple est le traitement d'éléments "événements externes" tels que la saisie au clavier, par le joystick ou par le 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.

LawrenceC
la source
Un bon point à propos de l'optimisation de la prédiction de la branche - je n'aurais jamais pensé à cela, mais vous avez raison.
Jimmy Breck-McKye
6

Ce n'est rien sur la vitesse d'horloge ou le but. Ils sont également capables de mener à bien la plupart, sinon toutes les tâches. Cependant, certaines sont légèrement mieux adaptées à certaines tâches qu'à d'autres.

Il y a eu un très vieux débat sur le point de savoir s'il est préférable d'avoir beaucoup de cœurs muets ou un petit groupe de cœurs très intelligents. Cela remonte facilement dans les années 80.

Dans une unité centrale, de nombreux calculs peuvent être effectués. Les cœurs plus intelligents sont capables d'effectuer de nombreux calculs différents en même temps (un peu comme multi-cœur mais pas, c'est compliqué; voir Parallélisme au niveau de l'instruction ). Un noyau intelligent peut effectuer plusieurs calculs en même temps (additionner, soustraire, multiplier, diviser, opération en mémoire), mais un seul à la fois. pour cette raison, ils sont physiquement plus gros (et donc beaucoup plus chers) que les noyaux plus sombres.

Un noyau muet est beaucoup plus petit et peut donc être ajouté à une seule puce, mais ne permet pas d'effectuer autant de calculs simultanés. Il existe un bon équilibre entre de nombreux noyaux stupides et quelques noyaux intelligents.

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 que d'autres codes s'appuient sur le résultat d'un calcul.

Ceci est une grande question plus complexe qu'il n'y paraît. Pour plus d'informations, lisez cet article sur la conception du processeur:

Microprocesseurs modernes - Guide de 90 minutes

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

Silverfire
la source
veuillez excuser la mauvaise grammaire et le style d'écriture généralement médiocre utilisé ci-dessus, je n'ai pas bu mon café. c'est un concept assez compliqué et le lien inclus est l'endroit où vous devriez aller si vous voulez mieux comprendre. pas ma mauvaise explication
Silverfire
1
Je l'ai corrigé pour vous et ajouté un lien également.
bwDraco
5

Je voudrais aborder un point syntaxique: les termes processeur et GPU sont des noms fonctionnels et non des noms architecturaux.

Si un ordinateur devait utiliser un processeur graphique en tant que processeur principal, celui-ci deviendrait alors une "unité de traitement centrale" (UC), quelle que soit l'architecture et la conception.

Andrew Neely
la source
4

Il est important de garder à l'esprit qu'il n'y a pas de ligne de démarcation magique dans l'espace d'architecture qui fasse d'un processeur le processeur "central" et d'un autre le processeur "graphique". (Certains GPU sont peut-être trop paralysés pour être pleinement généraux, mais ce ne sont pas ceux dont nous parlons ici.)

La distinction réside dans la manière dont ils sont installés sur le tableau et quelles tâches leur sont confiées. Bien sûr, nous utilisons un processeur polyvalent (ou un ensemble de processeurs polyvalents) pour le moteur principal de transfert de données, et une unité spéciale, parallélisée et profondément orientée, permettant aux éléments (tels que les graphiques) de tirer le meilleur parti de ceux-ci.

La plupart des astuces utilisées pour faire fonctionner les GPU très rapidement ont été développées pour la première fois par des personnes essayant de créer des processeurs plus rapides et plus performants. En fin de compte, Word, Excel et Netscape, entre autres, n'utilisent pas pleinement les fonctionnalités offertes par les puces graphiques spécialisées, mais s'exécutent même plus lentement sur ces architectures, car les branches sont souvent très coûteuses. et lente) le tuyau se dégage.

dmckee
la source
1
Je pense que les frais généraux de pipeline sont un détail fondamental, les réponses les mieux classées sont manquantes.
Steve
2

L’intérêt d’un GPU était de soulager le processeur des calculs graphiques coûteux qu’il effectuait à l’époque.
En les combinant à un seul processeur reviendrait à retourner là où tout a commencé.

Petruza
la source
Ouais, un pas en avant, deux pas en arrière.
Randolf Richardson
2

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

Les cartes graphiques reposent beaucoup sur le multi-threading, du moins dans le concept.

Comparez 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 système.

Avec AMD Fusion, cependant, cela va changer la manière dont nous aurons besoin d’utiliser la puissance de traitement: soit vectorisée, soit rapide pour un thread.

jokoon
la source
2

La raison pour laquelle nous utilisons toujours des processeurs est que les processeurs et les GPU ont leurs avantages uniques. Voir mon article suivant, accepté dans ACM Computing Surveys 2015, qui fournit une discussion complète et concluante sur le passage du «débat CPU vs GPU» à «l'informatique collaborative CPU-GPU».

Une enquête sur les techniques de calcul hétérogènes CPU-GPU

utilisateur984260
la source
1

Si mettre simplement, le GPU peut être comparé à la remorque dans la voiture. Comme d'habitude, le tronc est suffisant pour la majorité des gens, sauf dans les cas où ils achètent quelque chose de très gros. Ensuite, ils peuvent avoir besoin de remorque. La même chose avec GPU, comme d'habitude, il suffit 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 de GPU

Yuriy Zaletskyy
la source
1

Les gpus sont de bons processeurs de flux. vous pouvez penser au traitement de flux comme à la multiplication séquentielle d'une longue série de nombres. Les processeurs ont également des capacités de traitement de flux (elles s'appellent extensions SIMD), mais vous ne pouvez pas implémenter toute la logique de programmation sous forme de traitement de flux, et les compilateurs ont la possibilité de créer un code bty qui empêche l'utilisation d'instructions simd chaque fois que cela est possible.

tout n'est pas un tableau de nombres. les images et les vidéos sont, peut-être aussi sonores (il y a des encodeurs opencl ici et là). afin que gpus puisse traiter, encoder et décoder des images, des vidéos et tout ce qui est similaire. Un inconvénient est que vous ne pouvez pas tout décharger sur les gpus dans les jeux, car cela créerait un bégaiement. Les gpus sont occupés par des graphiques et sont supposés constituer le goulot d'étranglement du système lors des jeux. la solution optimale consisterait à utiliser pleinement tous les composants d’un ordinateur. ainsi, par exemple, le moteur physx de nvidia, par défaut, effectue des calculs sur le processeur lorsque le gpu est pleinement utilisé.

Uğur Gümüşhan
la source