Mi comprensión actual es que todo lo que se hace en un archivo de sombreador se hace en la GPU, y todo lo que se hace en mi código (Java, en mi caso) se hace en la CPU.
¿Es esta una descripción precisa?
Mi comprensión actual es que todo lo que se hace en un archivo de sombreador se hace en la GPU, y todo lo que se hace en mi código (Java, en mi caso) se hace en la CPU.
¿Es esta una descripción precisa?
Respuestas:
Esa es la esencia de esto.
En principio, la plataforma podría, posiblemente, hacer lo que quiera. Uno podría imaginar un sistema operativo avanzado haciendo una traducción justo a tiempo de código compilado de, digamos, x86 a código GPU. Del mismo modo, los controladores OpenGL pueden ejecutar lo que quieran en la CPU del host.
Pero en realidad, lo que acabas de describir es lo que sucede.
En general sí. Java se usa para escribir programas que se ejecutan en la CPU. Los lenguajes de sombreado (cg, hlsl, et al) se utilizan para escribir programas que se ejecutan en la gpu.
Una excepción a la regla sería usar API de terceros que pueden cerrar la brecha.
David Van Brink respondió a su pregunta en general.
Pero como él dice, el controlador OpenGL podría ejecutar cosas en la CPU, y en realidad sucede mucho. Especialmente con contextos de compatibilidad, donde algunas funciones heredadas extrañas no se pueden implementar en las tarjetas gráficas. Requieren emulación de software. Por ejemplo, he escuchado antes que el punteado se ejecuta en la CPU. Puede esperar también sorpresas con la elección.
Estas sorpresas pueden suceder aún más en MacOS con contextos 2.1, porque Apple ha unificado la vista de OpenGL bastante bien en todo su rango de hardware, y algunos hardware más pequeños carecen de algunas cosas que deben ser emuladas. Llega a ser realmente posible ejecutar la especificación ENTERA OpenGL 2.1 completamente en la CPU, si el código de creación de contexto especifica un dispositivo de software explícitamente.
Por el contrario, el código que se ejecuta a través de bibliotecas de computación como vexcl o boost compute, o el AMP de microsoft, o nVidia thrust, PUEDE ejecutarse en la GPU o la CPU dependiendo de los indicadores de configuración de API.
Y para finalizar, dentro de la CPU también tienes una arquitectura DSP con la parte que llamamos SIMD. El compilador ispc de Intel proporciona ayuda para generar código que está "garantizado" para ejecutarse en carriles SIMD con muchos diagnósticos de rendimiento en tiempo de compilación para ayudarlo a aprovecharlo al máximo. Agregue OpenMP a eso y puede obtener SIMD multiproceso, que se acerca a los conceptos de GPU. Si tiene una CPU de gama alta y una GPU de gama baja, esto en realidad puede ser más eficiente.
http://ispc.github.io/