¿Qué herramienta de codificación desea tener todo desarrollador que aún no exista?

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).

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:

  1. Sin salida, sin errores, o un error genérico inútil
  2. Salida de basura ininteligible
  3. 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.

Aquí, estoy regalando una idea que creo que es bastante única, gratis.

Me gustaría que mi código se anote con metadatos automáticamente para que cuando se vea con el editor correcto, muestre líneas de código que se ejecutan con mayor frecuencia en un formato más notorio que el código que rara vez se ejecuta. Puede ser color, tamaño o cualquier otro atributo. Lo importante es mantener actualizados los metadatos con comentarios de perfiles y datos de cobertura de código de ejecuciones reales del programa en el mundo real.

Con un editor de este tipo, elegiría qué líneas de código están bien probadas, son importantes, no deberían interferir ni intentar optimizar. Y qué código se puede permitir que permanezca subóptimo, etc.

Soy muy malo para actualizar el estado de las tareas / historias en las herramientas de gestión de proyectos. No importa cuál sea: JIRA, Basecamp, Asana, Good ol ‘Spreadsheet, etc … Tiendo a saltar de una tarea a la siguiente y presionar código varias veces al día.

Si hubiera una herramienta que pudiera ver mi historial de confirmación y generar automáticamente un informe basado en qué archivos cambiaron, qué cambió y qué tarea está asociada, * automáticamente *, eso sería un cambio de juego para mí.

Herramientas como JIRA ya tienen cierto nivel de integración con git, por ejemplo. Que siempre y cuando coloque el código de la tarea JIRA en el mensaje de confirmación, JIRA puede agregar la confirmación a la tarea misma. Ese es un buen punto de partida, pero me gustaría que fuera más amigable para los gerentes de proyecto / ejecutivos que analizan la tarea en sí.

Hace poco tiempo se actualizó el generador de perfiles de Chrome para que ahora contenga un visor increíblemente útil que visualiza cada llamada en una línea de tiempo mientras apila los métodos de llamada. Esto permite una gran comprensión de los problemas de tiempo y ayuda a encontrar qué sucede exactamente.

Me encantaría tener esta herramienta para más idiomas, en mi caso específicamente Java. Las herramientas de creación de perfiles para Java son bastante buenas, pero definitivamente le falta algo tan poderoso. Especialmente con múltiples hilos visibles, sería increíblemente bueno para rastrear problemas de sincronización como puntos muertos.

No sé si las interfaces de perfiles JVM estándar permitirían algo como esto (o si mataría el rendimiento de la aplicación), pero me encantaría tenerlo.

Un lenguaje de programación que infiere y realiza lo que quiero decir, no lo que realmente codifico.

Me encantaría usar una interfaz de voz a código, pero no estoy seguro de cómo manejaría todo el retroceso verbal.