2012-06-12 18 views
16

Sé que la pregunta es sólo parcialmente relacionados con la programación porque la respuesta me gustaría conseguir es originaria de estas dos preguntas:¿Por qué no usar GPU como CPU?

¿Por qué CPU núcleos número tan bajo (vs GPU)? y ¿Por qué no utilizamos GPU en lugar de CPU, solo GPU o CPU? (Sé que las GPU son especializadas, mientras que las CPU son más para tareas múltiples, etc.). También sé que hay limitaciones de memoria (host frente a GPU) junto con la precisión y la capacidad de cachés. Pero, en términos de comparación de hardware, las GPU de comparación entre CPU/GPU de gama alta a gama alta son mucho más rentables.

Así que mi pregunta es: Podríamos utilizar las GPU en lugar de CPU para el sistema operativo, aplicaciones, etc.

La razón por la que estoy haciendo esta pregunta es porque me gustaría saber la razón por la que los ordenadores actuales siguen utilizando 2 unidades principales de procesamiento (CPU/GPU) con dos memorias principales y sistemas de almacenamiento en caché (CPU/GPU), incluso si no es algo que le gustaría a un programador.

+2

Respuesta corta: CPU general frente a CPU especializada. – asawyer

+1

Estoy de acuerdo, pero ¿por qué no hacer "GPU de propósito general"? Los programadores deben aprender lenguajes de CPU (C++, Matlab, Python, etc.) y GPU (OpenGL, OpenCL, DirectX, etc.) y APU debido a su uso especializado versus general, mientras que un sistema de procesamiento de propósito general haría ambas cosas. – Maiss

+1

Hace un tiempo le pregunté por una pregunta relacionada que tiene buenas respuestas ... http://stackoverflow.com/questions/1126989/what-future-does-the-gpu-have-in-computing –

Respuesta

10

Las GPU están diseñadas para procesamiento relacionado con gráficos (obviamente), que es inherentemente algo que se beneficia del procesamiento en paralelo (haciendo múltiples tareas/cálculos a la vez). Esto significa que, a diferencia de las CPU modernas, que como probablemente sabrán generalmente tienen de 2 a 8 núcleos, las GPU tienen cientos de núcleos. Esto significa que son especialmente adecuados para procesar cosas como el trazado de rayos o cualquier otra cosa que pueda encontrar en un juego en 3D u otra actividad de gráficos intensivos.

CPUs, por otro lado, tienen un número relativamente limitado de núcleos porque las tareas que enfrenta una CPU normalmente no se benefician del procesamiento paralelo, sino de una escena en 3D. De hecho, tener demasiados núcleos en una CPU en realidad podría degradar el rendimiento de una máquina, debido a la naturaleza de las tareas que una CPU suele hacer y al hecho de que muchos programas no se escribirían para aprovechar la multitud de núcleos. . Esto significa que para la navegación por Internet o la mayoría de las tareas de escritorio, una CPU con algunos núcleos poderosos sería más adecuada para el trabajo que una GPU con muchos, muchos núcleos más pequeños.

Otra cosa a tener en cuenta es que más núcleos generalmente significa más energía necesaria.Esto significa que un teléfono o computadora portátil de 256 núcleos sería bastante poco práctico desde el punto de vista de la energía y el calor, sin mencionar los desafíos y costos de fabricación.

+1

Si más núcleos en la CPU es beneficioso depende del cálculo y de qué tan fácil es la paralelización – Attila

+0

Gracias AUAnonymous. Sin embargo, ¿podría explicar cómo una CPU de múltiples núcleos (>> 10 núcleos) degradaría el rendimiento? Tengo curiosidad sobre eso por lo que aprendí de la programación de OpenCL. La única limitación es el acceso a la memoria (velocidad y número de búsquedas), pero tener 4 niveles de memoria caché/memoria resolvería ese problema, ¿no? – Maiss

+1

Para intentar responder a su pregunta, solo puede degradar el rendimiento, dependiendo de la tarea, pero en general, asumiendo el mismo costo, una CPU con más núcleos tendrá velocidades de reloj más bajas que una con menos. Esto significa que si una tarea no se beneficia enormemente del procesamiento paralelo, la CPU con menos núcleos podrá realizar la tarea más rápido gracias a sus velocidades de reloj más altas. Otra cosa a tener en cuenta es que no se ha escrito un programa para aprovechar muchos núcleos, entonces los núcleos adicionales casi se "desperdiciarán" porque no se están utilizando de manera eficiente. – lyallcooper

12

Las GPU actuales carecen de muchas de las facilidades de una CPU moderna que generalmente se consideran importantes (cruciales, en realidad) para cosas como un sistema operativo.

Solo por ejemplo, un sistema operativo normalmente usa memoria virtual y buscapersonas para administrar procesos. La paginación le permite al SO dar a cada proceso su propio espacio de direcciones, (casi) completamente aislado de cualquier otro proceso. Al menos según la información públicamente disponible, la mayoría de las GPU no admiten paginación en absoluto (o al menos no de la manera que un sistema operativo necesita).

Las GPU también funcionan a velocidades de reloj mucho más bajas que las CPU. Por lo tanto, solo proporcionan un alto rendimiento para problemas embarazosamente paralelos. Las CPU generalmente proporcionan un rendimiento mucho mayor para el código de un solo subproceso. La mayor parte del código en un sistema operativo no es muy paralelo, de hecho, es bastante difícil hacerlo en paralelo (por ejemplo, durante años, Linux tenía un bloqueo gigante para garantizar que solo un hilo ejecutara la mayoría del código del kernel en en cualquier momento). Para este tipo de tarea, es poco probable que una GPU proporcione algún beneficio.

Desde un punto de vista de programación, una GPU es una bendición mixta (en el mejor de los casos). La gente ha pasado años trabajando en la programación de modelos para hacer que la programación sea una GPU hasta medio sana, y aún así es mucho más difícil (en general) que la programación de la CPU. Dada la dificultad de hacer que incluso las cosas relativamente triviales funcionen bien en una GPU, no puedo imaginarme intentando escribir algo tan parecido y tan grande como un sistema operativo para ejecutar en una.

+0

Gracias Jerry, ambas respuestas: AUAnonymous's y tu actualización fueron las que estaba buscando. Lo aprecio. – Maiss

0

Por lo general, los sistemas operativos son bastante simples, si nos fijamos en su estructura. Pero paralelizarlos no mejorará mucho las velocidades, solo funcionará la velocidad bruta del reloj.

Las GPU simplemente carecen de piezas y muchas instrucciones de sus conjuntos de instrucciones que un sistema operativo necesita, es una cuestión de sofisticación. Solo piense en las características de virtualización (Intel VT-x o AMD-AMD-v).

Los núcleos GPU son como hormigas tontas, mientras que una CPU es como un humano complejo, por así decirlo. Ambos tienen un consumo de energía diferente debido a esto y producen cantidades muy diferentes de calor.

Consulte esta extensa respuesta de superusuario here en más información.

Cuestiones relacionadas