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

373

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

ana
fuente
3
¿Cómo sé qué respuestas contienen información correcta? ¿Debo esperar hasta que otros voten arriba / abajo? Creo que fui demasiado apresurado en aceptar una respuesta: O
ell
14
Hay algunas respuestas recientes @ell ahora, que no contienen "información errónea". Están subiendo gradualmente a la cima con votos positivos debido al eficiente mecanismo de mercado del StackExchange maravillosamente diseñado ;-) Sugeriría esperar un poco más antes de aceptar una respuesta. Parece que muy prudentemente estás haciendo exactamente eso. Esta es una buena pregunta, por cierto. Puede parecer obvio, pero no lo es en absoluto. Gracias por preguntar!
Ellie Kesselman
124
Algo así como preguntar "Si el Boeing 747 es más rápido y más eficiente en el consumo de combustible, ¿por qué todavía manejamos autos"?
vartec
77
No, porque no es RISC versus CISC. Es uno de los otros fundamentos de la informática, ligeramente disfrazado. Es "¿Por qué descargamos el trabajo del procesador central a los procesadores de E / S?" .
JdeBP
55
@vartec: Creo que una analogía ligeramente mejor podría ser entre autobuses y taxis. Si hay cuarenta personas que quieren ir del mismo lugar al mismo lugar, un autobús será mucho más eficiente. Si hay cuarenta personas cuyos orígenes y destinos deseados están muy dispersos, incluso un solo taxi puede ser tan bueno como un autobús, y por el costo del autobús uno podría tener múltiples taxis.
supercat

Respuestas:

388

TL; Respuesta DR: las GPU tienen muchos más núcleos de procesador que las CPU, pero debido a que cada núcleo de GPU funciona significativamente más lento que un núcleo de CPU y no tienen las características necesarias para los sistemas operativos modernos, no son apropiados para realizar la mayor parte del procesamiento en el día a día informática. Son los más adecuados para operaciones de cómputo intensivo, como el procesamiento de video y las simulaciones físicas.


GPGPU sigue siendo un concepto relativamente nuevo. Las GPU se utilizaron inicialmente solo para representar gráficos; A medida que la tecnología avanzó, la gran cantidad de núcleos en las GPU en relación con las CPU se explotó mediante el desarrollo de capacidades computacionales para las GPU para que puedan procesar muchos flujos paralelos de datos simultáneamente, sin importar cuáles sean esos datos. Si bien las GPU pueden tener cientos o incluso miles de procesadores de flujo, cada uno funciona más lento que un núcleo de CPU y tienen menos características (incluso si están completas y se pueden programar para ejecutar cualquier programa que pueda ejecutar una CPU). Las características que faltan en las GPU incluyen interrupciones y memoria virtual, que son necesarias para implementar un sistema operativo moderno.

En otras palabras, las CPU y las GPU tienen arquitecturas significativamente diferentes que las hacen más adecuadas para diferentes tareas. Una GPU puede manejar grandes cantidades de datos en muchos flujos, realizando operaciones relativamente simples en ellos, pero no es adecuada para el procesamiento pesado o complejo en uno o pocos flujos de datos. Una CPU es mucho más rápida por núcleo (en términos de instrucciones por segundo) y puede realizar operaciones complejas en una sola o pocas secuencias de datos más fácilmente, pero no puede manejar eficientemente muchas secuencias simultáneamente.

Como resultado, las GPU no son adecuadas para manejar tareas que no se benefician significativamente o que no pueden ser paralelizadas, incluidas muchas aplicaciones de consumo comunes, como los procesadores de texto. Además, las GPU utilizan una arquitectura fundamentalmente diferente; uno tendría que programar una aplicación específicamente para una GPU para que funcione, y se requieren técnicas significativamente diferentes para programar las GPU. Estas diferentes técnicas incluyen nuevos lenguajes de programación, modificaciones a los lenguajes existentes y nuevos paradigmas de programación que son más adecuados para expresar una computación como una operación paralela que deben realizar muchos procesadores de flujo. Para obtener más información sobre las técnicas necesarias para programar las GPU, consulte los artículos de Wikipedia sobre procesamiento continuo y computación paralela .

Las GPU modernas son capaces de realizar operaciones vectoriales y aritmética de punto flotante, con las últimas tarjetas capaces de manipular números de punto flotante de doble precisión. Los marcos como CUDA y OpenCL permiten escribir programas para GPU, y la naturaleza de las GPU los hace más adecuados para operaciones altamente paralelizables, como en la informática científica, donde una serie de tarjetas de cómputo GPU especializadas pueden ser un reemplazo viable para un pequeño computar clúster como en NVIDIA Tesla Personal Supercomputers . Los consumidores con GPU modernas con experiencia en Folding @ home pueden usarlas para contribuir con los clientes de GPU , que pueden realizar simulaciones de plegamiento de proteínas a velocidades muy altas y aportar más trabajo al proyecto (asegúrese de leer las preguntas frecuentesprimero, especialmente los relacionados con las GPU). Las GPU también pueden permitir una mejor simulación física en los videojuegos usando PhysX, acelerar la codificación y decodificación de video, y realizar otras tareas de computación intensiva. Es este tipo de tareas que las GPU son las más adecuadas para realizar.

AMD es pionero en un diseño de procesador llamado Unidad de Procesamiento Acelerado (APU) que combina núcleos de CPU x86 convencionales con GPU. Este enfoque permite un rendimiento gráfico muy superior a las soluciones gráficas integradas en la placa base (aunque no es compatible con GPU discretas más costosas), y permite un sistema compacto y de bajo costo con un buen rendimiento multimedia sin la necesidad de una GPU separada. Los últimos procesadores Intel también ofrecen gráficos integrados en chip, aunque el rendimiento competitivo de la GPU integrada se limita actualmente a los pocos chips con Intel Iris Pro Graphics. A medida que la tecnología continúe avanzando, veremos un grado creciente de convergencia de estas partes que una vez estuvieron separadas. AMD imaginaUn futuro en el que la CPU y la GPU son uno, capaces de trabajar juntos sin problemas en la misma tarea .

No obstante, muchas de las tareas realizadas por los sistemas operativos y aplicaciones de PC aún se adaptan mejor a las CPU, y se necesita mucho trabajo para acelerar un programa usando una GPU. Dado que gran parte del software existente utiliza la arquitectura x86, y debido a que las GPU requieren diferentes técnicas de programación y faltan varias características importantes necesarias para los sistemas operativos, una transición general de la CPU a la GPU para la informática diaria es muy difícil.

bwDraco
fuente
39
Como esta respuesta, creo que la razón principal es que no tenemos buenos lenguajes de programación de flujo principal para tratar arquitecturas paralelas como esta. Hemos luchado durante décadas para avanzar en la programación de subprocesos múltiples, y la gente todavía llama "mal" a los subprocesos múltiples. A pesar de que las CPU y GPU multinúcleo son una realidad, tendremos que idear nuevos paradigmas de programación para hacer frente a esto.
Soren
Vale la pena señalar que Intel ha estado trabajando en la arquitectura Larrabee (durante demasiado tiempo), que es esencialmente un chip con una gran cantidad de núcleos x86.
Chris S
Gran respuesta para discutir las razones del hardware y las APU y cómo cambiarán esto. Sin embargo, @Soren da un muy buen punto en el lado del software. En realidad, es la combinación de los problemas de hardware, los problemas de software y el hecho de que las CPU funcionan y cuando se sabe que algo funciona, es difícil lograr que las personas lo reemplacen.
Nich Del
3
"No tenemos buenos lenguajes de programación de flujo principal para tratar arquitecturas paralelas como esta". - Haskell, OCaml, Scheme, F #, Erlang y casi cualquier otro lenguaje de programación funcional manejan muy bien el multithreading. Todos los que mencioné son convencionales.
BlueRaja - Danny Pflughoeft
1
@BlueRaja: conocemos estos idiomas, su definición de transmisión principal debe ser diferente a la mía :-)
Soren
252

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

La GPU no es 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 características de rendimiento diferentes . Ciertas tareas son más rápidas en una CPU, mientras que otras tareas se calculan más rápido en una GPU. La CPU se destaca por hacer manipulaciones complejas a un pequeño conjunto de datos, la GPU se destaca por 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 funcione sobre un gran bloque de datos (SIMD / Single Instruction Multiple Data), 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 muy reducida en la decodificación de las instrucciones, sin embargo, trabajar en bloques grandes significa que hay más unidades de trabajo en paralelo, por lo que utiliza muchos más transistores. implementar una sola instrucción de GPU (lo que causa una restricción de tamaño físico, usa más energía y produce 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 solo necesita trabajar con un solo dato, la cantidad de transistores necesarios para implementar una sola instrucción es mucho menor, por lo que una CPU puede permitirse tener un conjunto de instrucciones más grande, una ALU más compleja, una mejor predicción de rama, mejor virtualizada arquitectura y esquemas de almacenamiento en caché / canalización más sofisticados Sus ciclos de instrucción también son más rápidos.

La razón por la que todavía estamos usando la CPU no es porque x86 es el rey de la arquitectura de la CPU y Windows está escrito para x86, la razón por la que todavía estamos usando la CPU es porque el tipo de tareas que un sistema operativo debe hacer, es decir, tomar decisiones, se ejecuta de manera más eficiente en una arquitectura de CPU. Un sistema operativo necesita observar cientos de diferentes tipos de datos y tomar varias decisiones que dependen unas de otras; 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 adquiere la capacidad de trabajar sobre bloques de datos, por ejemplo, SSE. Además, a medida que la tecnología de fabricación mejora y los chips se hacen más pequeños, la GPU puede permitirse implementar instrucciones más complejas.

Lie Ryan
fuente
23
Esta es probablemente la mejor respuesta aquí. Es importante comprender las diferencias fundamentales entre los dos paradigmas. Para que las GPU superen a las CPU, teniendo en cuenta las cargas de trabajo de hoy, esencialmente significa que una GPU debe convertirse en una CPU. Y así, la pregunta es la respuesta.
surfasb
2
+1 por ser esta la mejor respuesta. Tanto esta como la respuesta aceptada son correctas, pero esta lo explica mucho más claramente.
Me sorprende que nadie en este hilo haya mencionado la sobrecarga de enviar datos a la GPU: el ancho de banda limitado a través de los buses PCI-Express hace que algunas operaciones paralelas en una GPU sean mucho más lentas de lo que se realizaron en la CPU. Se puede ver un caso simple en el que variar el tamaño de una FFT hizo una diferencia significativa en el rendimiento de la GPU frente a la CPU debido a la sobrecarga de enviar datos, configurar un contexto, leer los resultados: stackoverflow.com/a/8687732/303612 Se pueden realizar operaciones más pequeñas en la memoria caché en las CPU, y el ancho de banda de la memoria es muy superior a la arquitectura PCI-E actual
Dr. Andrew Burnett-Thompson
1
@ Dr. Andrew Burnett-Thompson: eso es porque eso es irrelevante para la pregunta. Actualmente, la GPU se considera una unidad de procesamiento auxiliar, por eso es necesario y costoso mover datos de / a una GPU. Si tratamos a GPU como la unidad de procesamiento de primera clase, no habrá necesidad de reunir datos entre la memoria principal y la memoria de GPU.
Mentira Ryan
1
No es optimista, no es una sobrecarga de ancho de banda cero. Si un procesador con una arquitectura GPU ejecuta todo el espectáculo, no hay nada que deba moverse, la memoria GPU es la memoria principal. No hay gastos generales de transferencia para hablar en primer lugar porque no hay transferencias. Por cierto, esto no es hipotético, las APU de AMD utilizan HSA (arquitectura de sistema heterogéneo) con memoria principal unificada que permite la copia cero entre la CPU y la GPU.
Mentira Ryan
75

Las GPU carecen de:

  1. Memoria virtual (!!!)
  2. Medios de direccionamiento de dispositivos distintos de la memoria (p. Ej., Teclados, impresoras, almacenamiento secundario, etc.)
  3. Interrupciones

Los necesita para poder implementar algo como un sistema operativo moderno.

También son (relativamente) lentos en aritmética de doble precisión (en comparación con su rendimiento aritmético de precisión simple) *, y son mucho más grandes (en términos de tamaño de silicio). Las arquitecturas de GPU más antiguas no admiten 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. Finalmente, (como han señalado otras respuestas), para tareas que no pueden ser paralelas, las GPU pierden en comparación con las CPU que reciben la misma carga de trabajo.

EDITAR : Tenga en cuenta que esta respuesta se escribió en 2011: la tecnología de GPU es un área que cambia constantemente. Las cosas pueden ser muy diferentes dependiendo de cuándo estés leyendo esto: P

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

Billy ONeal
fuente
@Cicada: ¿Tienes una referencia para eso? En cualquier caso, incluso si eso es cierto, incluso el hardware reciente no funcionará bien en ese caso. (por ejemplo, no tendría demasiada ventaja de rendimiento sobre una CPU, y una desventaja de consumo de energía)
Billy ONeal
3
Sí, los dispositivos Fermi como dijiste (con CUDA 4.0 y sm_20), admiten saltos indirectos (y, por lo tanto, métodos virtuales C ++, herencia, etc.).
Angry Lettuce
¿544 GigaFLOPS de una GPU de $ 300 de 2 años es lenta?
Ben Voigt
2
@Ben: Solo obtienes ese tipo de rendimiento en aplicaciones de datos paralelos. Las operaciones secuenciales generales son un juego de pelota completamente diferente. (Eso es solo con todos los 1600 núcleos en ese chip funcionando en paralelo, ejecutando esencialmente la misma instrucción una y otra vez ... e incluso eso es teórico en lugar de real)
Billy ONeal
@Billy: Pero eso es lentitud en una clase particular de algoritmos, no lentitud en la aritmética de doble precisión (que es lo que usted afirmó). (Y las CPU generalmente tampoco alcanzan rendimientos de referencia)
Ben Voigt
37

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

¿Qué preferirías tener como compañero desarrollador, un tipo súper rápido o 100 clones rápidos que en realidad no son 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 piso; 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 permanecen inactivos mientras un clon escribe el informe (de lo contrario, solo obtendrá 100 copias del mismo informe).

John Robertson
fuente
44
¿Podría incluso tener ... ambos?
Kevin Panko
22
@ Kevin: Sí, pero lo que se necesita un ordenador con tanto una CPU y una GPU! ¡Ojalá hubiera tal cosa!
Joachim Sauer
3
Gran analogía Recordaré esto.
Mayo
23

Debido a que 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 se puede hacer masivamente paralelo, como el hash, la GPU es mucho 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 hacerlo, su GPU podría estar en medio de varios cientos de hash. Las GPU están diseñadas para hacer muchas cosas al mismo tiempo, y las CPU están diseñadas para hacer una cosa a la vez, pero muy rápido.

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

Sin embargo, una pequeña nota al margen, si fuera posible eliminar la CPU y solo tener una GPU, ¿no cree que deberíamos cambiarle el nombre? :)

Phoshi
fuente
Creo que la mayoría de las CPU modernas están diseñadas para hacer 2, 4 u 8 cosas a la vez.
danielcg
@ danielcg25: Y la mayoría de las GPU modernas están diseñadas para hacer 256, 512, 1024 cosas a la vez (la GTX 680 tiene 1536 núcleos CUDA). Cada núcleo de CPU individual es una entidad distinta conceptualmente, pero esto no es cierto para una GPU.
Phoshi
@ danielcg25: Soy consciente, pero un comentario con un malentendido fundamental (aunque intencional) de la respuesta podría ser dañino si alguien lo estuviera leyendo sin conocer el tema. "Ser un imbécil" en ese sentido no es realmente apreciado en SE ya que reduce la relación señal: ruido.
Phoshi
Solo estaba proporcionando información. La mayoría de las computadoras hoy en día son capaces de procesar de 2 a 8 cosas a la vez. Algunos procesadores pueden hacer incluso más que eso. Todavía no se acerca a las GPU que hacen cientos de cosas a la vez.
danielcg
@ danielcg25: Sin embargo, es un tipo diferente de procesamiento, que es de lo que se trata la pregunta. Cada núcleo de CPU está efectivamente separado, trabajando con sus propios fragmentos de datos y sus propios procesos. Cada núcleo de la CPU realiza una tarea diferente y separada entre sí, y no se escalan linealmente: un octo-núcleo no es dos veces más útil que un núcleo cuádruple no es dos veces más útil que un núcleo dual. Los núcleos de GPU, por otro lado, realizan la misma tarea en diferentes datos y escalan linealmente. Es obvio que existen CPU multinúcleo, pero esto no es lo mismo .
Phoshi
14

¿Realmente se pregunta por qué no estamos usando GPU como arquitecturas en la CPU?

GPU es solo una CPU especializada de una tarjeta gráfica. Prestamos computación GPU no gráfica porque la CPU de propósito general no está a la par en la ejecución de punto flotante y paralelo.

De hecho, estamos utilizando diferentes arquitecturas de CPU (más GPU-ish). Por ejemplo, los procesadores Niagara son bastante multitarea. SPARC T3 ejecutará 512 hilos concurrentes.

jkj
fuente
¿Por qué un voto negativo?
jkj
3
Supongo que la última línea, ya que es simplemente falsa. De hecho, solo puedo pensar en un sistema operativo mainstream solo x86; e incluso ese ha sido portado a procesadores alfa y ARM, solo que no se ofrece comercialmente en este momento.
Javier
Okay. Se eliminó la última sección que era mi opinión sobre el soporte del sistema operativo convencional que obstaculiza el cambio a nuevas arquitecturas. Podría no estar en el alcance de la respuesta.
jkj
11

Podría estar terriblemente equivocado 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 direcciones muy limitado en comparación con una CPU.

  • Las unidades de ejecución de GPU no pueden lidiar con la ramificación de manera eficiente.

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

Siempre he pensado que las unidades de ejecución de GPU deben ser como los "SPEs" de Playstation 3, quieren recibir un bloque de datos, ejecutar una serie de operaciones secuenciales y luego escupir otro bloque de datos, enjuague, repita. No tienen tanta memoria direccionable como el "CPE" principal, pero la idea es dedicar cada "SPE" a una tarea secuencial específica. La salida de una unidad puede 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 en función de cuáles son esos datos.

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

Si algo no se ajusta a este modelo de "transmisión", entonces tiene una tarea que no se puede paralelizar de manera eficiente 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 se ajusten a ese modelo, pero siempre habrá algunas.

LawrenceC
fuente
Buen punto sobre la optimización de predicción de sucursales: nunca lo habría considerado, pero tienes razón.
Jimmy Breck-McKye
6

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

Ha habido una discusión muy antigua 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 pueden realizar muchos cálculos diferentes al mismo tiempo (algo así como multinú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 solo 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 puede agregar más a un solo chip, pero no puede hacer tantos cálculos simultáneos. Hay un buen equilibrio entre muchos núcleos tontos y algunos núcleos inteligentes.

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

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

Microprocesadores modernos: una guía de 90 minutos

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

Silverfire
fuente
disculpe la mala gramática y, en general, el estilo de escritura sub-par utilizado en lo anterior, no he tomado mi café. es un concepto bastante complicado y el enlace incluido es donde debe ir si quiere entender más. no es mi mala explicación
Silverfire
1
Lo arreglé para usted y también agregué un enlace.
bwDraco
5

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

Si una computadora usara una GPU como su procesador principal, se convertiría en una "unidad central de procesamiento" (CPU) independientemente de la arquitectura y el diseño.

Andrew Neely
fuente
4

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 GPU pueden estar demasiado lisiadas para ser completamente generales, pero esas no son de las que estamos hablando aquí).

La distinción es una de cómo se instalan en el tablero y qué tareas se les asignan. Por supuesto, utilizamos procesadores de propósito general (o un conjunto de procesadores de propósito general) para el transportador de datos principal, y una unidad especial, paralelizada y profundamente canalizada para cosas (como gráficos) para aprovecharlos mejor.

La mayoría de los trucos geniales que se han utilizado para hacer que las GPU hagan su trabajo muy rápido fueron desarrollados primero por personas que intentaban hacer CPU más rápidos y mejores. Resulta que Word y Excel y Netscape y muchas otras cosas para las que las personas usan sus computadoras no solo aprovechan al máximo las características que ofrecen los chips especializados en gráficos, sino que incluso se ejecutan más lentamente en esas arquitecturas porque se ramifican mucho (muy caro y lento) despeja la tubería.

dmckee
fuente
1
Creo que la sobrecarga de la tubería es un detalle fundamental que faltan las respuestas mejor clasificadas.
Steve
2

El punto principal de la existencia de una GPU era liberar a la CPU de los costosos cálculos gráficos que estaba haciendo en ese momento.
Al combinarlos con un solo procesador nuevamente estaríamos volviendo a donde todo comenzó.

Petruza
fuente
Sí, un paso adelante, dos pasos atrás.
Randolf Richardson
2

Por una simple razón: la mayoría de las aplicaciones no son multiproceso / vectorizado.

Las tarjetas gráficas dependen en gran medida de múltiples subprocesos, al menos en el concepto.

Compare un automóvil con un solo motor, un automóvil con un motor más pequeño por rueda. Con el último automóvil, debe 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 AMD, cambiará la forma en que tendremos que utilizar el poder de procesamiento: vectorizado, o rápido para un hilo.

jokoon
fuente
2

La razón por la que todavía usamos CPU es que tanto las CPU como las GPU tienen sus ventajas únicas. Consulte mi siguiente artículo, aceptado en ACM Computing Surveys 2015, que proporciona una discusión concluyente e integral sobre cómo alejarse del 'debate CPU vs GPU' por 'computación colaborativa CPU-GPU'.

Una encuesta de las técnicas de computación heterogéneas CPU-GPU

usuario984260
fuente
1

En pocas palabras, la GPU se puede comparar con el remolque en el automóvil. Como generalmente, el baúl es suficiente para la mayoría de las personas, excepto para los casos si compran algo realmente grande. Entonces pueden necesitar un remolque. Lo mismo con la GPU, ya que generalmente es suficiente tener una CPU normal que realice la mayoría de las tareas. Pero si necesita algunos cálculos intensivos en muchos hilos, entonces puede necesitar GPU

Yuriy Zaletskyy
fuente
1

Los GPU son buenos procesadores de flujo. Puedes pensar en el procesamiento de flujo como multiplicar una larga serie de números secuencialmente. Los cpus también tienen capacidades de procesamiento de flujo (se llaman extensiones SIMD), pero no puede implementar toda la lógica de programación como procesamiento de flujo, y los compiladores tienen la opción de crear btyecode que evita el uso de instrucciones SIMD siempre que sea posible.

No todo es un conjunto de números. las imágenes y los videos son, tal vez también sonido (hay codificadores opencl aquí y allá). para que gpus pueda procesar, codificar y decodificar imágenes, videos y cualquier cosa similar. Un inconveniente es que no puedes descargar todo a gpus en los juegos porque crearía tartamudeo, los gpus están ocupados con los gráficos y se supone que son el cuello de botella en el sistema cuando juegas. La solución óptima sería utilizar todos los componentes de una PC. así, por ejemplo, el motor physx de nvidia, por defecto, hace cálculos en la CPU cuando la GPU se utiliza por completo.

Uğur Gümüşhan
fuente