Il me semble que ces derniers temps, de nombreux calculs sont effectués sur le GPU. Il est évident que les graphiques sont créé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?
TL; DR réponse: Les GPU ont beaucoup plus de cœurs de processeur que de CPU, mais comme chaque cœur de GPU s'exécute beaucoup plus lentement qu'un cœur de CPU et ne possède pas les fonctionnalités nécessaires aux systèmes d'exploitation modernes, il ne convient pas pour la plupart des traitements dans l'informatique quotidienne. Ils sont particulièrement adaptés aux opérations nécessitant beaucoup de calcul, 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 Turing complete 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 processeurs de texte. De plus, les GPU utilisent une architecture fondamentalement différente. il faudrait programmer une application spécialement 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 Wikipédia sur traitement du flux et 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 utilisateurs disposant de GPU modernes et expérimentés dans Folding @ home peuvent les utiliser pour/ les clients GPU , qui peuvent effectuer des simulations de repliement de protéines à très grande vitesse et contribuer davantage au travail (veillez à lire la FAQ first, en particulier ceux liés aux GPU). Les GPU peuvent également permettre une meilleure simulation physique dans les jeux vidéo à l'aide de 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é (APU) , qui associe des cœurs de processeur x86 classiques à des GPU. Cette approche permet des performances graphiques bien 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 avance, nous verrons un degré croissant de convergence de ces parties autrefois séparées. AMD envisage un avenir où processeur et GPU ne font qu'un, capables 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 beaucoup de travail pour accélérer un programme à l’aide d’un GPU. Etant donné que de nombreux logiciels utilisent l’architecture x86 et que les GPU nécessitent différentes techniques de programmation et qu’il leur manque plusieurs fonctionnalités importantes pour les systèmes d’exploitation, il est très difficile de passer d’un processeur à un GPU en général.
Qu'est-ce qui rend le GPU beaucoup plus rapide que le processeur?
Le GPU est pas plus rapide que le CPU. Le processeur et le processeur graphique sont conçus avec deux objectifs différents, avec des compromis différents. Ils ont donc la caractéristique différente performance. 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), toutes appliquant 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, donc 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 est not car x86 est le roi de l'architecture de processeur et que Windows est écrit pour x86, la raison pour laquelle nous utilisons encore le processeur est due au type de tâches qu'un système d'exploitation doit effectuer. faire, c’est-à-dire prendre des décisions, est exécuté plus efficacement sur une architecture de CPU. 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.
À l'avenir, nous verrons une convergence entre l'architecture de la CPU et celle du GPU, à mesure que la CPU 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.
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 aussi (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 parallélisées, les GPU perdent par rapport aux CPU recevant 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.
Un processeur est comme un travailleur qui va très 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 du fait que certains clones restent inactifs si vous voulez)
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 - ils peuvent chacun en balayer une partie.
Pour certaines actions, les clones sentent mauvais, par exemple rédigez le rapport hebdomadaire - tous les clones sauf un restent inactifs pendant qu'un clone rédige le rapport (sinon, vous n'obtenez que 100 copies du même rapport).
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 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’a pas été 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? :)
Demandez-vous vraiment pourquoi n'utilisons-nous pas les architectures de type GPU dans les processeurs?
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 en fait différentes architectures de processeur (plus de GPU-ish). Par exemple. Niagara les processeurs sont assez multitâches. SPARC T3 exécutera 512 threads simultanés.
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 correspond 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, au joystick ou sur 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.
Ceci 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 vieux très vieux argument quant à savoir s'il vaut mieux 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. à cause de cela, 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.
C'est une question beaucoup plus compliquée qu'il n'y paraît. Pour plus d'informations, lisez cet article sur la conception du processeur:
Microprocesseurs modernes - Guide de 90 minutes
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 comme processeur principal, celui-ci deviendrait alors une "unité de traitement centrale" (CPU), quelle que soit l'architecture et la conception.
Il est important de garder à l'esprit qu'il n'y a pas de ligne de séparation magique dans l'espace d'architecture qui fasse d'un processeur "central" et d'un autre "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 canalisée pour les éléments (tels que les graphiques) qui peuvent en tirer le meilleur parti.
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, Netscape et bien d’autres choses pour lesquelles les utilisateurs utilisent leur ordinateur ne profitent pas pleinement des fonctionnalités offertes par les puces graphiques spécialisées, mais exécutent même plus lentement sur ces architectures, car beaucoup de branches provoquer des dégagements de canalisations (très coûteux et lents).
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.
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, on retournerait là où tout a commencé.
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 exhaustive et exhaustive 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
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 aussi 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 btyecode qui empêche l'utilisation d'instructions simd autant que 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é.
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