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?
373
Réponses:
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.
la source
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.
la source
Les GPU manquent:
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.
la source
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).
la source
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? :)
la source
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.
la source
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.
la source
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:
la source
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.
la source
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.
la source
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é.
la source
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.
la source
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
la source
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
la source
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é.
la source