Realmente no soy una persona en 3D, y solo he usado sombreadores un poco en algunos ejemplos de Three.js, y hasta ahora tengo la impresión de que solo se están usando para la parte gráfica de la ecuación.
Aunque, el artículo de Wikipedia (bastante críptico) y algunas otras fuentes me llevan a creer que pueden usarse para algo más que efectos gráficos, es decir, para programar la GPU ( Wikipedia ).
Entonces, la GPU sigue siendo un procesador, ¿verdad? Con un conjunto de instrucciones más grande y diferente para una manipulación de vectores más fácil y rápida, pero sigue siendo un procesador. ¿Puedo usar sombreadores para hacer programas regulares (siempre que tenga acceso a la memoria de video, lo cual es probable)?
Editar: programas regulares == "Aplicaciones", es decir, crear programas de Windows / consola, o al menos tener alguna forma de dibujar cosas en la pantalla, tal vez incluso tomando la entrada del usuario.
Respuestas:
Originalmente, el hardware de procesamiento de gráficos dedicado tenía un conjunto fijo de funciones cableadas. Tomaría geometría de entrada, haría cosas muy específicas para transformarla y rasterizarla, y luego enviaría los resultados a la pantalla. Con el tiempo, esta funcionalidad se parametrizó y eventualmente se programó. "Shaders" se convirtió en el término utilizado para los programas que se ejecutaban en la GPU, ya que controlaban la transformación y el sombreado de la geometría.
A medida que el hardware de la GPU evolucionó, cada vez más se ha vuelto programable, por lo que ahora la mayor parte de los tipos de sombreadores que uno puede escribir solo contribuyen indirectamente al sombreado real de cualquier cosa en la pantalla (me refiero a cosas como la geometría y los sombreadores de casco aquí) ) Con eso vino la generalización de la GPU como un dispositivo para hacer un procesamiento basado en flujos altamente concurrentes a gran escala, de modo que si bien la intención de una GPU y de los sombreadores es generalmente implementar algún tipo de efecto gráfico elegante, también pueden ser se usa para realizar ciertos tipos de cálculos de propósito general (particularmente aquellos que son adecuados para ser calculados en paralelo). Esto a menudo se conoce como programación de GPU de propósito general, o "GPGPU".
Sin embargo, la GPU sigue siendo altamente especializada y no puede hacer muchas de las cosas que una CPU podría hacer. También tiene una conectividad limitada con el resto del hardware en un sistema, por lo que realmente no puede escribir programas "normales" (con salida de consola o entrada de mouse, etc.) completamente en la GPU. Puede realizar cálculos en la GPU que no están destinados a ser interpretados como renders, pero no es una CPU independiente en sí misma.
fuente
La GPU no puede decirle a la CPU qué hacer. Solo puede proporcionar resultados en su memoria que leerá la CPU.
Shaders / GPGPU no se pueden usar para :
Shaders / GPGPU se pueden usar para :
Ver OpenCL . Puede utilizar sombreadores para cálculos no gráficos.
Editar basado en comentarios:
Los sombreadores se usan solo para representar gráficos. Realizar cálculos no gráficos en GPU se llama GPGPU .
fuente
Simple. La unidad de procesamiento de gráficos finalmente obtuvo sombreadores, que producen un efecto de fantasía para sombrear. Esto se volvió programable, por lo que los efectos se volvieron cada vez más elegantes. Finalmente, toda la GPU se convirtió en una unidad SIMD.
SIMD significa datos de instrucción única múltiple. Actualmente las GPU son como un árbol. Tiene X muchos núcleos, cada uno con Y muchos núcleos, y Z muchos núcleos. Cuanto más descienda el árbol, más rápida y pequeña será la memoria, más paralelos y simples serán los cálculos.
Entonces, la GPU se ha convertido en una especie de GPU General Purpuse. No se llama CPU porque no es la unidad central de procesamiento, a pesar de que puede manejar E / S, administración de memoria y programación.
No es necesario decir que el poder de la GPGPU proviene de tener que hacer algunas operaciones divisibles y paralelas en muchos datos a la vez. Si bien, por lo tanto, es inútil para la mayoría de las cosas de software generales, nVidia está trabajando para hacer de la GPGPU una CPU. Creen que pueden exponer la GPU como una CPU ARM. Esta técnica de traducción también está dentro de las CPU x86, que son RISC en su núcleo.
OpenCL, CUDA y DirectX son como un lenguaje de programación de personalidad dividida. OpenCL, por ejemplo, se ejecuta en la CPU, pero descarga 'bombas' ("núcleos") que se están beneficiando de SIMD, a la GPU.
No pasará mucho tiempo antes de que todo sea estilo CPU-GPU Fusion / Sandy Bridge.
fuente