2011-07-10 13:31:41 +0000 2011-07-10 13:31:41 +0000
380
380

¿Por qué seguimos usando CPU en lugar de GPU?

Me parece que hoy en día se hacen muchos cálculos en la GPU. Obviamente los gráficos se hacen allí, pero usando CUDA y similares, AI, algoritmos hashing (piensa en bitcoins) y otros también se hacen en la GPU. ¿Por qué no podemos deshacernos de la CPU y usar la GPU por sí sola? ¿Qué hace que la GPU sea mucho más rápida que la CPU?

Respuestas (15)

394
394
394
2011-07-10 14:00:49 +0000

TL;DR réponse: 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 ne possède pas les caractéristiques nécessaires aux systèmes d'exploitation modernes, ils ne sont pas appropriés pour effectuer la plupart des traitements dans l'informatique quotidienne. Ils sont plus adaptés aux opérations de calcul intensif telles que le traitement vidéo et les simulations physiques.


GPGPU est un concept encore relativement nouveau. Les GPU étaient initialement utilisés pour le rendu de graphiques uniquement ; 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 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 ces 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 CPU et ont moins de fonctionnalités (même s'ils sont Turing complete et peuvent être programmés pour exécuter n'importe quel programme qu'un CPU peut exécuter). Parmi les caractéristiques manquantes des GPU, on trouve 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 à 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 sur ceux-ci, mais il est mal adapté à un traitement lourd ou complexe sur un seul ou quelques flux de données. Un CPU est beaucoup plus rapide par cœur (en termes d'instructions par seconde) et peut effectuer plus facilement des opérations complexes sur un seul ou quelques flux de données, mais ne peut pas traiter efficacement de nombreux flux simultanément.

En conséquence, les GPU ne sont pas adaptés pour traiter des tâches qui ne bénéficient pas de manière significative ou qui 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 sensiblement différentes sont nécessaires pour programmer les GPU. Ces différentes techniques 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 comme une opération parallèle à effectuer par de nombreux processeurs de flux. Pour plus d'informations sur les techniques nécessaires à la programmation des GPU, voir les articles de Wikipedia sur le traitement en continu et le calcul parallèle .

Les GPU modernes sont capables d'effectuer des opérations vectorielles et de l'arithmétique en virgule flottante, avec les dernières cartes capables de manipuler des nombres à virgule flottante de double précision. Les cadres 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 le calcul scientifique, où une série de cartes de calcul GPU spécialisées peut remplacer de manière viable une petite 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 avec les clients GPU , qui peuvent effectuer des simulations de pliage de protéines à très grande vitesse et contribuer davantage au projet (assurez-vous de lire d'abord les FAQ , en particulier celles relatives aux GPU). Les GPU peuvent également permettre une meilleure simulation de la physique dans les jeux vidéo en utilisant PhysX, accélérer le codage et le décodage vidéo et effectuer d'autres tâches de calcul intensives. Ce sont ces types de tâches que les GPU sont les plus aptes à effectuer.

AMD est le pionnier d'une conception de processeur appelée unité de traitement accéléré (APU) qui combine les cœurs de CPU x86 conventionnels avec les GPU. Cette approche permet d'obtenir des performances graphiques largement supérieures à celles des solutions graphiques intégrées aux cartes mères (bien qu'elles ne soient pas comparables aux GPU discrets plus coûteux), et permet d'obtenir un système compact et peu coûteux avec 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 puce, bien que les performances concurrentielles des GPU intégrés soient actuellement limitées aux quelques puces équipées de l'Intel Iris Pro Graphics. Au fur et à mesure des progrès technologiques, nous assisterons à un degré croissant de convergence de ces pièces autrefois séparées. AMD envisage un avenir où le CPU et le GPU ne feront qu'un, capable de travailler ensemble de manière transparente sur une même tâche .

Néanmoins, de nombreuses tâches effectuées par les systèmes d'exploitation et les applications PC sont encore mieux adaptées aux CPU, et beaucoup de travail est nécessaire pour accélérer un programme utilisant un GPU. Étant donné qu'un grand nombre de logiciels existants utilisent l'architecture x86, et que les GPU nécessitent des techniques de programmation différentes et qu'il leur manque plusieurs caractéristiques importantes nécessaires aux systèmes d'exploitation, une transition générale du CPU au GPU pour l'informatique de tous les jours est très difficile.

257
257
257
2011-07-10 20:22:09 +0000

¿Qué hace que la GPU sea mucho más rápida que la CPU?

La GPU es no más rápida que la CPU. La CPU y la GPU están diseñadas con dos objetivos diferentes, con diferentes compensaciones, por lo que tienen diferentes características de rendimiento. Ciertas tareas son más rápidas en una CPU mientras que otras se calculan más rápido en una GPU. La CPU sobresale en hacer manipulaciones complejas a un pequeño conjunto de datos, la GPU sobresale en hacer manipulaciones simples a un gran conjunto de datos.

La GPU es una CPU de propósito especial, diseñada para que una sola instrucción trabaje sobre un gran bloque de datos (SIMD/Datos múltiples de una sola instrucción), todos ellos aplicando la misma operación. Trabajar en bloques de datos es ciertamente más eficiente que trabajar con una sola celda a la vez porque hay una sobrecarga mucho menor en la decodificación de las instrucciones, sin embargo trabajar en grandes bloques significa que hay más unidades de trabajo en paralelo, por lo que utiliza muchos más transistores para implementar una sola instrucción de la GPU (causando limitación de tamaño físico, usando más energía y produciendo más calor)

La CPU está diseñada para ejecutar una sola instrucción en un solo dato lo más rápido posible. Dado que sólo necesita trabajar con un único datum, el número de transistores que se requiere para implementar una única instrucción es mucho menor, por lo que la CPU puede permitirse tener un conjunto de instrucciones más grande, una ALU más compleja, una mejor predicción de ramas, una mejor arquitectura virtualizada, y un esquema de caché y tuberías más sofisticado. Sus ciclos de instrucción también son más rápidos.

La razón por la que seguimos usando CPU es no porque x86 es el rey de la arquitectura de CPU y Windows está escrito para x86, la razón por la que seguimos usando CPU es porque el tipo de tareas que un SO necesita hacer, es decir, tomar decisiones, se ejecuta más eficientemente en una arquitectura de CPU. Un SO necesita mirar cientos de tipos de datos diferentes y tomar varias decisiones que dependen todas de cada uno; este tipo de trabajo no se paraleliza fácilmente, al menos no en una arquitectura SIMD.

En el futuro, lo que veremos es una convergencia entre la arquitectura de la CPU y la GPU a medida que la CPU adquiera la capacidad de trabajar sobre bloques de datos, por ejemplo, SSE. Además, a medida que la tecnología de fabricación mejore y los chips sean más pequeños, la GPU podrá permitirse implementar instrucciones más complejas.

77
77
77
2011-07-10 21:17:30 +0000

Falta de GPU:

  1. Memoria virtual (!!!)
  2. Medios de direccionamiento que no sean la memoria (por ejemplo, teclados, impresoras, almacenamiento secundario, etc.)
  3. Interrupciones

Necesitas estos para poder implementar algo parecido a un sistema operativo moderno.

También son (relativamente) lentos en aritmética de doble precisión (cuando se comparan con su rendimiento en aritmética de precisión simple)*, y son mucho más grandes (en términos de tamaño del silicio). Las arquitecturas de GPU más antiguas no soportan llamadas indirectas (a través de punteros de función) necesarias para la mayoría de la programación de propósito general, y las arquitecturas más recientes que lo hacen lentamente. Por último, (como han señalado otras respuestas), para las tareas que no se pueden paralelizar, las GPUs pierden en comparación con las CPUs a las que se les da la misma carga de trabajo.

EDITAR : Tenga en cuenta que esta respuesta fue escrita en 2011 – la tecnología de las GPU es un área que cambia constantemente. Las cosas podrían ser muy diferentes dependiendo de cuando leas esto :P

* Algunas GPUs no son lentas en aritmética de doble precisión, como las líneas Quadro o Tesla de NVidia (generación Fermi o más reciente), o la línea FirePro de AMD (generación GCN o más reciente). Pero estos no están en las máquinas de la mayoría de los consumidores.

39
39
39
2011-07-11 15:39:21 +0000

Una CPU es como un trabajador que va súper rápido. Una GPU es como un grupo de trabajadores clónicos que van rápido, pero que todos tienen que hacer exactamente lo mismo al unísono (con la excepción de que puedes hacer que algunos clones se queden inactivos si quieres)

¿Qué preferirías tener como compañero de desarrollo, un tipo súper rápido, o 100 clones rápidos que no son realmente tan rápidos, pero todos tienen que realizar las mismas acciones simultáneamente?

Para algunas acciones, los clones son bastante buenos, por ejemplo, barrer el suelo - cada uno puede barrer una parte de él.

Para algunas acciones, los clones apestan, por ejemplo, escribir el informe semanal - todos los clones menos uno se quedan inactivos mientras un clon escribe el informe (de lo contrario, sólo obtienes 100 copias del mismo informe).

24
24
24
2011-07-10 17:51:46 +0000

Porque las GPU están diseñadas para hacer muchas cosas pequeñas a la vez, y las CPU están diseñadas para hacer una cosa a la vez. Si su proceso puede hacerse masivamente en paralelo, como el hash, la GPU es órdenes de magnitud más rápida, de lo contrario no lo será.

Su CPU puede calcular un hash mucho, mucho más rápido que su GPU - pero el tiempo que le toma a su CPU para hacerlo, su GPU podría estar a medio camino a través de varios cientos de hashes. Las GPUs están diseñadas para hacer muchas cosas al mismo tiempo, y las CPUs están diseñadas para hacer una cosa a la vez, pero muy rápido.

El problema es que las CPUs y las GPUs son soluciones muy diferentes para problemas muy diferentes, hay un poco de superposición pero generalmente lo que está en su dominio se queda en su dominio. No podemos reemplazar la CPU con una GPU porque la CPU está sentada ahí haciendo su trabajo mucho mejor de lo que podría hacerlo una GPU, simplemente porque una GPU no está diseñada para hacer el trabajo, y una CPU sí lo está.

Una pequeña nota al margen, sin embargo, si fuera posible desechar la CPU y sólo tener una GPU, ¿no crees que le daríamos un nuevo nombre? :)

15
15
15
2011-07-10 17:57:36 +0000

¿Realmente te preguntas por qué no estamos usando la GPU como las arquitecturas en la CPU?

La GPU es sólo una CPU especializada de una tarjeta gráfica. Le prestamos a la GPU computación no gráfica porque las CPU de propósito general no están a la altura de la ejecución en paralelo y en coma flotante.

En realidad estamos usando diferentes (más parecidas a la GPU) arquitecturas de CPU. Por ejemplo, los procesadores Niagara son bastante multitarea. SPARC T3 ejecutará 512 hilos concurrentes.

12
12
12
2011-07-10 15:55:56 +0000

Puede que me equivoque terriblemente aquí, y estoy hablando de poca o ninguna autoridad en el tema, pero aquí va:

  • Creo que cada unidad de ejecución de GPU (“núcleo”) tiene un espacio de dirección muy limitado en comparación con una CPU.

  • Las unidades de ejecución de GPU no pueden hacer frente a la ramificación de manera eficiente.

  • Las unidades de ejecución de la GPU no soportan interrupciones de hardware de la misma manera que las CPU.

Siempre he pensado que la manera en que las unidades de ejecución de la GPU están destinadas a ser algo como los “SPEs” de la Playstation 3, quieren que se les dé un bloque de datos, ejecutar una serie de operaciones secuenciales en él, y luego escupir otro bloque de datos, enjuagar, repetir. No tienen tanta memoria direccionable como el “CPE” principal, pero la idea es dedicar cada “SPE” a una tarea específica y secuencial. La salida de una unidad podría alimentar la entrada de otra unidad.

Las unidades de ejecución no funcionan bien si intentan “analizar” los datos y tomar un montón de decisiones basadas en lo que son esos datos.

Estos “bloques de datos” pueden ser parte de una corriente, como una lista de vértices de la tabla de estado de un juego, datos MPEG de un disco, etc.

Si algo no encaja en este modelo de “corriente” entonces tienes una tarea que no puede ser paralizada eficientemente y la GPU no es necesariamente la mejor solución para ello. Un buen ejemplo es el procesamiento de cosas basadas en “eventos externos” como el teclado, el joystick o la entrada de red. No hay muchas cosas que no encajen en ese modelo, pero siempre habrá algunas.

7
7
7
2011-07-12 04:36:14 +0000

Esto no es nada sobre la velocidad del reloj o el propósito. Ambos son igualmente capaces de completar la mayoría, si no todas las tareas; sin embargo algunos son ligeramente más adecuados para algunas tareas que para otras.

Ha habido un muy viejo argumento sobre si es mejor tener muchos núcleos tontos o un pequeño grupo de núcleos muy inteligentes. Esto se remonta fácilmente a los años 80.

Dentro de una CPU hay muchos cálculos posibles que se pueden hacer. Los núcleos más inteligentes son capaces de llevar a cabo muchos cálculos diferentes al mismo tiempo (algo así como multi-núcleo pero no, es complicado; ver Paralelismo a nivel de instrucción). Un núcleo inteligente podría hacer varios cálculos al mismo tiempo (sumar, restar, multiplicar, dividir, operación de memoria) pero sólo uno a la vez; debido a esto, son físicamente más grandes (y por lo tanto mucho más caros) que los núcleos más tontos.

Un núcleo tonto es mucho más pequeño y por lo tanto se pueden añadir más a un solo chip pero no son capaces de hacer tantos cálculos simultáneos. Hay un fino equilibrio entre muchos núcleos tontos y unos pocos núcleos inteligentes.

Las arquitecturas de núcleos múltiples funcionan bien con los gráficos porque los cálculos pueden dividirse fácilmente entre cientos de núcleos, pero también depende de la calidad del código y de si otro código se basa en el resultado de un cálculo.

Esta es una pregunta mucho más complicada de lo que parece. Para más información, lea este artículo sobre el diseño de la CPU:

Modern Microprocessors - A 90 Minute guide

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

6
6
6
2011-07-15 11:44:05 +0000

Me gustaría abordar un punto sintáctico: Los términos CPU y GPU son nombres funcionales, no arquitectónicos.

Si un ordenador utilizara una GPU como procesador principal, se convertiría en una “unidad central de procesamiento” (CPU), independientemente de la arquitectura y el diseño.

5
5
5
2011-07-10 14:57:18 +0000

Es importante tener en cuenta que no hay una línea divisoria mágica en el espacio de la arquitectura que haga que un procesador sea el “central” y otro el “gráfico”. (Bueno, algunas GPUs pueden estar demasiado lisiadas para ser completamente generales, pero no son de las que estamos hablando aquí.)

La distinción es una de cómo se instalan en la placa y qué tareas se les asignan. Por supuesto, usamos un procesador de propósito general (o un conjunto de procesadores de propósito general) para el principal impulsor de datos, y una unidad especial, paralelizada y profundamente revestida de tubos para que las cosas (como los gráficos) puedan aprovecharse mejor.

La mayoría de los trucos ingeniosos que se han usado para que las GPU hagan lo suyo muy rápido fueron desarrollados primero por gente que intentaba hacer CPU más rápidas y mejores. Resulta que Word y Excel y Netscape y muchas otras cosas para las que la gente usa sus computadoras no sólo no aprovechan al máximo las características ofrecidas por los chips especializados en gráficos sino que incluso corren más despacio en esas arquitecturas porque las ramificaciones causan despejes de tuberías (muy costosos y lentos).

3
3
3
2015-06-07 11:53:13 +0000

La razón por la que seguimos usando CPU es que tanto las CPU como las GPU tienen sus ventajas únicas. Vea mi siguiente artículo, aceptado en ACM Computing Surveys 2015, que proporciona una discusión concluyente y exhaustiva sobre el cambio del “debate CPU vs GPU” a la “computación colaborativa CPU-GPU”. Una encuesta sobre técnicas de computación heterogéneas CPU-GPU

3
3
3
2011-07-17 16:44:16 +0000

Por una simple razón: la mayoría de las aplicaciones no son multi-hilo/vectorizadas.

Las tarjetas gráficas se basan en gran medida en el multi-hilo, al menos en el concepto.

Compara un coche con un solo motor, un coche con un motor más pequeño por rueda. Con este último coche, necesitas controlar todos los motores, algo que no se ha tenido en cuenta desde el punto de vista de la programación del sistema.

Sin embargo, con la fusión de AMD, cambiará la forma en que tendremos que utilizar la potencia de procesamiento: o bien vectorizado, o bien rápido para un solo hilo.

3
3
3
2011-07-10 21:35:07 +0000

El objetivo de que hubiera una GPU era liberar a la CPU de los costosos cálculos gráficos que estaba haciendo en ese momento. Al combinarlos en un solo procesador de nuevo se volvería a donde todo comenzó.

2
2
2
2016-07-01 11:46:23 +0000

Los gpus son buenos procesadores de streaming. Puedes pensar en el procesamiento de streaming como la multiplicación de una larga serie de números de forma secuencial. Los cpus también tienen capacidades de procesamiento de streaming (se llaman extensiones SIMD) pero no puedes implementar toda la lógica de programación como procesamiento de streaming, y los compiladores tienen la opción de crear btyecode que imita el uso de instrucciones simd siempre que sea posible.

no todo es una serie de números. las imágenes y los vídeos lo son, quizás el sonido también (hay codificadores opencl aquí y allá). así que gpus puede procesar, codificar y decodificar imágenes, videos y cualquier cosa similar. un inconveniente es que no se puede descargar todo a gpus en los juegos porque crearía tartamudez, los gpus están ocupados con los gráficos y se supone que son el cuello de botella en el sistema cuando se juega a los juegos. la solución óptima sería utilizar plenamente todos los componentes en una PC. así, por ejemplo, el motor de física de nvidia, por defecto, hace los cálculos en la cpu cuando la gpu se utiliza plenamente.

2
2
2
2015-11-16 15:42:30 +0000

Si para poner simplemente GPU puede ser comparado con el remolque en el coche. Como normalmente el maletero es suficiente para la mayoría de la gente, excepto en los casos en que compran algo realmente grande. Entonces pueden necesitar un remolque. Lo mismo con la GPU, ya que normalmente es suficiente tener una CPU ordinaria que realizará la mayoría de las tareas. Pero si necesitas algunos cálculos intensivos en muchos hilos, entonces puedes necesitar GPU