La réponse TL;DR : 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 qu'ils ne disposent pas des fonctionnalités nécessaires aux systèmes d'exploitation modernes, ils ne sont pas appropriés pour effectuer la plupart des traitements de l'informatique quotidienne. Ils sont plus adaptés aux opérations de calcul intensif, comme le traitement vidéo et les simulations physiques.
GPGPU est encore un concept relativement nouveau. À l'origine, les GPU n'étaient utilisés que pour le rendu de graphiques ; 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 les capacités de calcul des GPU afin qu'ils puissent traiter simultanément de nombreux flux parallèles de données, quelles que soient ces données. Bien que les GPU puissent avoir des centaines, voire des milliers de processeurs de flux, chacun d'entre eux fonctionne plus lentement qu'un cœur de CPU et possède moins de fonctionnalités (même si elles sont Complète de Turing et peut être programmé pour exécuter n'importe quel programme qu'un CPU peut exécuter). Les caractéristiques manquantes des GPU sont 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 à des tâches différentes. Un GPU peut traiter de grandes quantités de données dans de nombreux flux, en effectuant des opérations relativement simples sur ces données, mais il est mal adapté au traitement lourd ou complexe d'un seul ou de quelques flux de données. Un CPU est beaucoup plus rapide par cœur (en termes d'instructions par seconde) et peut effectuer des opérations complexes sur un seul ou quelques flux de données plus facilement, mais ne peut pas traiter efficacement de nombreux flux simultanément.
Par conséquent, les GPU ne sont pas adaptés pour traiter les tâches qui ne bénéficient pas de manière significative ou 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 significativement différentes sont nécessaires pour programmer les GPU. Ces techniques différentes 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 en tant qu'opération parallèle à exécuter par de nombreux processeurs de flux. Pour plus d'informations sur les techniques nécessaires à la programmation des GPU, voir les articles de Wikipédia sur traitement en continu y calcul parallèle .
Les GPU modernes sont capables d'effectuer des opérations vectorielles et de l'arithmétique à virgule flottante, les cartes les plus récentes étant capables de manipuler des nombres à virgule flottante en double précision. Des frameworks 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 l'informatique scientifique, où une série de cartes de calcul GPU spécialisées peut remplacer avantageusement un petit cluster de calcul comme dans le cas de Superordinateurs personnels NVIDIA Tesla . Les consommateurs qui disposent de GPU modernes et qui ont l'expérience de Folding@home peuvent les utiliser pour contribuer à l'effort de recherche. Clients GPU qui peut effectuer des simulations de repliement de protéines à très grande vitesse et contribuer à d'autres travaux dans le cadre du projet (ne manquez pas de lire l'avis de la Commission européenne). FAQs d'abord, notamment ceux liés aux GPU). Les GPU peuvent également permettre une meilleure simulation de la physique dans les jeux vidéo à l'aide de PhysX, accélérer le codage et le décodage vidéo et effectuer d'autres tâches nécessitant des calculs intensifs. Ce sont ces types de tâches que les GPU sont le mieux à même d'exécuter.
AMD est pionnier dans la conception d'un processeur appelé le Unité de traitement accéléré (APU) qui combine des cœurs de CPU x86 classiques avec des GPU. Cette approche permet d'obtenir des performances graphiques largement supérieures à celles des solutions graphiques intégrées à la carte mère (bien qu'elles n'égalent pas celles des GPU discrets plus coûteux), et permet d'obtenir un système compact et peu coûteux offrant 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 la puce, bien que les performances compétitives des GPU intégrés soient actuellement limitées aux quelques puces dotées de la technologie Intel Iris Pro Graphics. Au fur et à mesure que la technologie progresse, nous assisterons à un degré croissant de convergence de ces éléments autrefois distincts. AMD envisage un avenir où l'unité centrale et le processeur graphique 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 des PC sont encore mieux adaptées aux CPU, et beaucoup de travail est nécessaire pour accélérer un programme à l'aide d'un GPU. Étant donné que la plupart des logiciels existants utilisent l'architecture x86, que les GPU nécessitent des techniques de programmation différentes et qu'il leur manque plusieurs fonctions importantes nécessaires aux systèmes d'exploitation, il est très difficile d'effectuer une transition générale du CPU au GPU pour l'informatique quotidienne.
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.
0 votes
@DanH Sauf que Java est un mauvais langage, spécifiquement pour créer des programmes qui ont un haut niveau de parallélisme. Nous avons besoin de langages courants, comme la programmation fonctionnelle, où le parallélisme est la façon naturelle d'exprimer tout programme. De plus, les langages de programmation doivent être bien adaptés pour fonctionner avec une très petite quantité de mémoire pour chaque unité de calcul, car c'est là que le GPU est efficace. Comme mentionné dans la question, il n'y a que quelques problèmes tels que l'IA et autres qui font cela naturellement sans un nouveau langage de programmation.
0 votes
Mais vous n'avez pas besoin d'exécuter Java. Le fait est que vous n'êtes pas enchaîné à une architecture de processeur. Quant à un nouveau langage pour le traitement parallèle, cela fait peut-être 30 ans que l'on essaie d'en inventer un, sans faire de progrès significatifs. Alors qu'après 30 ans de développement de langages de programmation séquentiels, nous avions Fortran, COBOL, Modula-2, C, Pascal, Ada, PL/I, C++, et une foule d'autres.
1 votes
Question connexe de Stack Overflow : Pourquoi ne programmons-nous pas sur le GPU ?
135 votes
C'est un peu comme demander "Si le Boeing 747 est plus rapide et plus économe en carburant, pourquoi continuons-nous à conduire des voitures" ?
0 votes
Cela vous rappelle-t-il quelque chose (RISC vs. CISC) ?
8 votes
Non, parce que ce n'est pas RISC contre CISC. C'est l'un des autres fondamentaux de l'informatique, légèrement déguisé. C'est "Pourquoi déchargeons-nous le travail du processeur central sur les processeurs d'E/S ?" .
1 votes
@vartec en tant que développeur CUDA chevronné, je pense que c'est l'analogie la plus précise que j'ai jamais vu, haut la main. Je garde celui-là :)
6 votes
@vartec : Je pense qu'une analogie légèrement meilleure pourrait être entre les bus et les taxis. S'il y a quarante personnes qui 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 destinations souhaitées sont très dispersées, même un seul taxi peut être aussi efficace qu'un bus, et pour le coût du bus, on pourrait avoir plusieurs taxis.
0 votes
Comme pour toutes les questions techniques importantes, Mybusters a abordé cette question (Et ce n'est pas une mauvaise analogie)
0 votes
En rapport : La différence entre le GPU et le CPU