Este artículo de Evolve Benchmark detalla la evolución de su infraestructura para el procesamiento de redes neuronales (NN) en motores de renderizado, centrándose en la introducción y el uso de la tecnología Cooperative Vector en Vulkan y DirectX. Inicialmente, la empresa implementó su propia infraestructura para la inferencia de Neural Materials (NM) debido a la falta de soporte de hardware acelerado y la necesidad de compatibilidad multiplataforma. Esto implicó el uso de compute shaders y la evitación de extensiones específicas del proveedor.
Posteriormente, la aparición de Neural Radiance Caching (NRC) y la necesidad de entrenamiento en tiempo real de redes neuronales más pequeñas impulsaron la expansión de la infraestructura para incluir tanto inferencia como entrenamiento. Un desafío clave surgió al trabajar con NM y NTC, donde diferentes píxeles en la pantalla podían requerir diferentes conjuntos de pesos para la red, algo que la extensión Cooperative Matrix original no podía manejar eficientemente. La solución fue un enfoque basado en 'buckets' o agrupación de consultas, pero se buscaba una solución más elegante.
La introducción de Cooperative Vector, y su equivalente en DirectX llamado WaveMatrix, proporcionó una solución a este problema. Cooperative Vector introduce el concepto de 'long vectors', que son estructuras de datos vectoriales más largas que las tradicionales, y permite operaciones vector-matriz optimizadas. A diferencia de Cooperative Matrix, Cooperative Vector permite que cada hilo (thread) en un wave maneje su propio long vector, lo que es crucial para escenarios donde diferentes píxeles requieren diferentes datos de entrada (como en NM y NTC). La tecnología se basa en VGPRs (Vector General Purpose Registers) y no requiere un flujo de control uniforme ni waves completamente ocupados para funcionar, aunque el rendimiento se optimiza con estos.
La tecnología también introduce diferentes 'layouts' para matrices: 'plain' (row/column major) y 'optimal' (MulOptimal para inferencia y OuterProductOptimal para entrenamiento). Los layouts 'optimal' son opacos, lo que significa que el acceso a elementos individuales está restringido y optimizado por el driver. El usuario es responsable de llenar los long vectors manualmente con los datos necesarios.
En resumen, Cooperative Vector representa un avance significativo en el procesamiento de redes neuronales en gráficos, permitiendo una mayor flexibilidad y eficiencia en escenarios donde la divergencia de datos es un factor clave, como en la generación de materiales y texturas procedimentales.
