Representación universal con SwiftShader, ahora con código abierto
viernes, 26 de agosto de 2016
Publicado por Nicolas Capens, Ingeniero de software y Pixel Pirate
Desde 2009, en Chrome se ha usado SwiftShader para habilitar la representación 3D en sistemas que admiten por completo la representación con aceleración mediante hardware. Aunque el contenido 3D como WebGL se escribe para una GPU, algunos dispositivos de los usuarios no cuentan con hardware gráfico capaz de ejecutarlo. En otros dispositivos, pueden existir errores graves en los controladores por los que la representación 3D podría no ser confiable o incluso posible. En Chrome, se aplica SwiftShader en estos sistemas a fin de garantizar la disponibilidad del contenido web 3D para todos los usuarios.
Sin SwiftShader en una máquina con una GPU inadecuada (izquierda), Chrome no puede ejecutar el experimento de WebGL Globe. Con SwiftShader habilitado (derecha), en la misma máquina se puede representar por completo el contenido.
A fin de brindar a los usuarios el mejor rendimiento, en SwiftShader se usan varias técnicas para realizar cálculos de manera eficaz en la CPU. En contraposición a la más frecuente optimización en tiempo de compilación, la generación de código dinámico permite adaptar el código a las tareas en cuestión en tiempo de ejecución. Este enfoque complejo se simplifica usando Reactor, un lenguaje C++ personalizado e integrado de sintaxis imperativa e intuitiva. En SwiftShader también se aplican operaciones vectoriales de tipo SIMT, combinadas con tecnología de múltiples subprocesos, para un mayor paralelismo entre los núcleos y las unidades vectoriales disponibles de la CPU. Esto permite la representación en tiempo real para usos como la representación de aplicaciones en Android.
Los desarrolladores pueden acceder al código fuente de SwiftShader desde su repositorio de git. Regístrate en la lista de distribución para mantenerte actualizado respecto de los desarrollos más recientes y colaborar con otros desarrolladores de SwiftShader de la comunidad de código abierto.