cpu - techpowerup - mercury gpu acceleration after effects
¿Por qué no usar GPUs como CPU? (3)
Sé que la pregunta solo está parcialmente relacionada con la programación porque la respuesta que me gustaría obtener es originalmente de estas dos preguntas:
¿Por qué el número de núcleos de la CPU es tan bajo (frente a la GPU)? y ¿Por qué no estamos utilizando GPU en lugar de CPU, GPU solamente o solo 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 vs GPU) junto con la capacidad de precisión y caché. Pero, en términos de comparación de hardware, las GPU de comparación de CPU / GPU de gama alta a gama alta son mucho más eficaces.
Así que mi pregunta es: ¿podríamos usar GPU en lugar de CPU para sistemas operativos, aplicaciones, etc.?
La razón por la que hago estas preguntas es porque me gustaría saber la razón por la que las computadoras actuales todavía usan 2 unidades de procesamiento principal (CPU / GPU) con dos sistemas de memoria principal y caché (CPU / GPU), incluso si no es algo programador le gustaría.
Las GPU actuales carecen de muchas de las facilidades de una CPU moderna que generalmente se consideran importantes (realmente importantes) para cosas como un sistema operativo.
Solo por ejemplo, un sistema operativo normalmente utiliza la memoria virtual y la paginación para administrar procesos. La paginación le permite al sistema operativo dar a cada proceso su propio espacio de direcciones, (casi) completamente aislado de cualquier otro proceso. Al menos en base a la información disponible públicamente, la mayoría de las GPU no son compatibles con la paginación (o al menos no de la forma que necesita un sistema operativo).
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 vergonzosamente paralelos. Las CPU generalmente proporcionan un rendimiento mucho más alto para el código de un solo hilo. La mayoría del código en un sistema operativo no es altamente paralelo; de hecho, mucho de eso es bastante difícil de hacer paralelo (por ejemplo, durante años, Linux tuvo 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 el punto de vista de la programación, una GPU es una bendición mixta (en el mejor de los casos). Las personas han pasado años trabajando en los modelos de programación para hacer que la programación de una GPU sea hasta medio sensata, 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 que sea tan grande y complejo como un sistema operativo para ejecutarlo.
Las GPU están diseñadas para el procesamiento relacionado con gráficos (obviamente), que es inherentemente algo que se beneficia del procesamiento paralelo (realizar múltiples tareas / cálculos a la vez). Esto significa que, a diferencia de las CPU modernas, que como usted sabe, generalmente tienen entre 2 y 8 núcleos, las GPU tienen cientos de núcleos. Esto significa que están especialmente diseñados para procesar cosas como el trazado de rayos o cualquier otra cosa que puedas encontrar en un juego en 3D u otra actividad con gran cantidad de gráficos.
Por otro lado, las CPU tienen un número relativamente limitado de núcleos porque las tareas a las que se enfrenta una CPU generalmente no se benefician del procesamiento en paralelo tanto como lo haría la representación de una escena 3D. De hecho, tener demasiados núcleos en una CPU podría degradar el rendimiento de una máquina, debido a la naturaleza de las tareas que normalmente realiza una CPU y al hecho de que no se escribirían muchos programas para aprovechar la multitud de núcleos. . Esto significa que para la navegación en Internet o la mayoría de las tareas de escritorio, una CPU con unos pocos núcleos potentes 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 que se necesita más potencia. Esto significa que un teléfono o una computadora portátil de 256 núcleos sería poco práctico desde el punto de vista de la energía y el calor, por no mencionar los desafíos y costos de fabricación.
Por lo general, los sistemas operativos son bastante simples, si miras su estructura. Pero paralelizarlos no mejorará las velocidades, solo lo hará la velocidad del reloj.
Las GPU simplemente carecen de partes y muchas instrucciones de sus conjuntos de instrucciones que necesita un sistema operativo, es una cuestión de sofisticación. Solo piense en las características de virtualización (Intel VT-x o AMD-v de AMD).
Los núcleos de GPU son como hormigas tontas, mientras que una CPU es como un humano complejo, por así decirlo. Ambos tienen diferentes consumos de energía debido a esto y producen cantidades muy diferentes de calor.
Vea esta extensa respuesta de superusuario here en más información.