Oh, santo cielo, no puede haber nada más que herramientas perfectas para depurar sombreadores de GPU .
Si alguna vez has trabajado incluso en los proyectos de programación de GPU más triviales que entiendes al instante. El problema es que está depurando un coprocesador externo, efectivamente. La depuración de la actividad de un procesador externo funciona de máquina a máquina porque hay software en el medio en ambos extremos . Esto simplemente no existe entre una CPU y una GPU.
La programación de GPU se está convirtiendo en una herramienta tan poderosa. Tantas aplicaciones. Gráficos 3D, procesamiento de imágenes, procesamiento de video, simulación física, aprendizaje automático. Y sin embargo, vivimos en la Edad Media cuando programamos una GPU. Solo hay unas pocas herramientas que le permiten inspeccionar el contenido de los búferes VRAM y retroceder en las iteraciones anteriores. Existen algunos métodos primitivos por los cuales puede implementar un registro limitado. La mayoría de estos son específicos del proveedor y poco confiables si tiene algo más que una breve lista de GPU. El soporte para estas herramientas es una aventura de configuración delicada tanto en Windows como en Linux. Diferentes versiones de herramientas para diferentes versiones de OS o sabores. Controladores o modos o GPU incompatibles. Y simplemente olvídalo en una Mac (a menos que uses metal).
- En la industria del software, ¿qué idioma se usa más?
- ¿Por qué existe la necesidad de externalizar el desarrollo de software?
- ¿Qué es la prueba de ruptura en soluciones de software?
- Cómo realizar un seguimiento de las metodologías y patrones que utiliza en sus aplicaciones web
- Como ingeniero / programador de software, ¿alguna vez encontró que los algoritmos de aprendizaje eran tediosos?
No puedes pasar por el código. No puedes inspeccionar variables. No puede verificar fácilmente que los uniformes de entrada y los atributos se transfirieron correctamente. No puede visualizar fácilmente problemas de subprocesos (que son x10 en una GPU), y no hay una buena manera de perfilar secciones del código de sombreador y analizarlo para saber dónde enfocar la optimización. Tampoco existe el manejo de errores o excepciones al nivel de aplicación. Cuando su código de sombreador es incorrecto, generalmente obtiene una de tres cosas:
- Sin salida, sin errores, o un error genérico inútil
- Salida de basura ininteligible
- Panico kernel
Esto tiene que arreglarse y rápido. No podemos dirigirnos hacia el futuro de todas las cosas que las GPU hacen por nosotros, sin poder codificarlas con la misma eficacia que codificamos la CPU del host. Las GPU son críticas para la tecnología futura de muchas maneras. No sé por qué todavía los llamamos “unidades de procesamiento gráfico”. Estoy seguro de que hacen eso. Pero hacen mucho más. Los chips que llamamos GPU hoy en día se denominan con mayor precisión “coprocesador de álgebra lineal”
Érase una vez, las CPU x86 no tenían soporte de coma flotante. Era un coprocesador separado que podía instalar en su PC. Ahora los coprocesadores de coma flotante están tan integrados que la mayoría de la gente probablemente ya no los considere como un módulo separado dentro del procesador, y mucho menos un procesador separado por completo. El procesamiento de punto flotante está perfectamente integrado en los procesadores, en los idiomas, los sistemas operativos, las interfaces y las bibliotecas.
La GPU ya no es solo una unidad gráfica para juegos. Es un coprocesador de uso general para álgebra lineal, o incluso algunos cálculos ligeros. Pero su utilidad está muy perjudicada por la forma engorrosa en que los programamos y los depuramos. Es hora de que ese tipo de procesamiento se convierta en una parte perfecta del conjunto de herramientas.
Lo que Apple ha hecho recientemente con Metal y Xcode es un buen paso, pero eso debe ser en todos los entornos, y todavía es solo una abolladura en el problema.