394 votes

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

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

3 votes

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

14 votes

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

0 votes

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

15voto

jkj Points 522

Vous demandez vraiment Pourquoi n'utilisons-nous pas des architectures similaires à celles des GPU dans les CPU ?

Le GPU n'est qu'une unité centrale spécialisée d'une carte graphique. Nous prêtons les GPU aux calculs non graphiques parce que les CPU à usage général ne sont tout simplement pas à la hauteur en matière d'exécution parallèle et en virgule flottante.

Nous utilisons en fait différentes architectures de CPU (plus proches des GPU). Par exemple. Niagara Les processeurs sont assez multitâches. SPARC T3 fera tourner 512 threads simultanés.

0 votes

Pourquoi un downvote ?

3 votes

Je suppose la dernière ligne, car c'est tout simplement faux. En fait, je ne connais qu'un seul système d'exploitation grand public exclusivement x86, et même celui-ci a été porté sur les processeurs alpha et ARM, mais il n'est pas encore commercialisé pour le moment.

0 votes

Ok. J'ai supprimé la dernière section qui donnait mon avis sur le fait que le support des systèmes d'exploitation courants empêche le passage à de nouvelles architectures. Ce n'est peut-être pas dans le cadre de la réponse.

12voto

LawrenceC Points 70381

Il se peut que je me trompe lourdement et que je ne fasse pas autorité en la matière, mais je vais le faire :

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

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

  • Les unités d'exécution des GPU ne prennent pas en charge les interruptions matérielles comme le font les CPU.

J'ai toujours pensé que les unités d'exécution du GPU devaient ressembler aux "SPE" de la Playstation 3. Elles doivent recevoir un bloc de données, exécuter un certain nombre d'opérations séquentielles sur celui-ci, puis renvoyer un autre bloc de données, rincer et répéter. Ils ne disposent pas d'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 sur la base de ces données.

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

Si quelque chose ne correspond pas à ce modèle de "streaming", alors vous avez une tâche qui ne peut pas être efficacement paralellisé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 les entrées 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.

0 votes

Bon point concernant l'optimisation de la prédiction des branches - je n'y aurais jamais pensé, mais vous avez raison.

7voto

Silverfire Points 191

C'est rien sur la vitesse d'horloge ou le but. Ils sont tous deux également capables d'accomplir la plupart des tâches, sinon toutes, mais certains sont légèrement mieux adaptés à certaines tâches qu'à d'autres.

Il y a eu un très Vieille discussion pour savoir s'il est préférable d'avoir beaucoup de cœurs idiots ou un petit groupe de cœurs très intelligents. Cela remonte facilement aux années 80.

À l'intérieur d'une unité centrale, il est possible d'effectuer de nombreux calculs. Les cœurs les plus intelligents sont capables d'effectuer de nombreux calculs différents en même temps (un peu comme les cœurs multiples, mais non, c'est compliqué ; cf. Parallélisme au niveau des instructions ). Un cœur intelligent peut effectuer plusieurs calculs en même temps (addition, soustraction, multiplication, division, opération de mémoire) mais un seul à la fois ; pour cette raison, ils sont physiquement plus grands (et donc beaucoup plus chers) que les cœurs plus simples.

Les noyaux muets sont beaucoup plus petits et peuvent donc être ajoutés à une seule puce, mais ils ne sont pas capables d'effectuer autant de calculs simultanés. Il existe un équilibre délicat entre un grand nombre de noyaux muets 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 aussi de la qualité du code et du fait que d'autres codes dépendent du résultat d'un calcul.

Il s'agit d'un beaucoup question plus compliquée qu'il n'y paraît. Pour plus d'informations, lisez cet article sur la conception des processeurs :

Microprocesseurs modernes - Un guide de 90 minutes

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

0 votes

Veuillez excuser la mauvaise grammaire et le style d'écriture généralement médiocre utilisés dans ce qui précède, je n'ai pas bu mon café. il s'agit d'un concept assez compliqué et le lien inclus est l'endroit où vous devriez aller si vous voulez en comprendre davantage. pas ma mauvaise explication

2 votes

Je l'ai corrigé pour vous, et j'ai aussi ajouté un lien.

6voto

Andrew Neely Points 349

Je voudrais aborder un point de syntaxe : Les termes CPU et GPU sont des noms fonctionnels et non des noms d'architecture.

Si un ordinateur devait utiliser un GPU comme processeur principal, il deviendrait alors une "unité centrale de traitement" (CPU), indépendamment de son architecture et de sa conception.

5voto

spong Points 875

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

La distinction tient à la manière dont ils sont installés sur la carte et aux tâches qui leur sont confiées. Bien entendu, nous utilisons un processeur polyvalent (ou un ensemble de processeurs polyvalents) pour le déplacement principal des données, et une unité spéciale, parallélisée et profondément tubulaire pour les choses (comme les graphiques) qui peuvent en tirer le meilleur parti.

La plupart des astuces qui ont été utilisées pour rendre les GPU très rapides ont d'abord été développées par des personnes qui essayaient de fabriquer des CPU plus rapides et plus performants. Il s'avère que Word, Excel, Netscape et bien d'autres choses pour lesquelles les gens utilisent leur ordinateur, non seulement ne tirent pas pleinement parti des fonctionnalités offertes par les puces graphiques spécialisées, mais s'exécutent même plus lent sur ces architectures parce que la branche cause beaucoup d'effacements (très coûteux et lents) de pipe-line.

1 votes

Je pense que la surcharge du pipeline est un détail fondamental que les réponses les mieux classées ignorent.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X