006 Métodos
006.6 Gráficos
006.68 Software

1.1 Introducción

WebGPU API es la sucesora de WebGL API y representa el mayor cambio arquitectónico desde el inicio de las soluciones de GPU basadas en navegador. La razón principal de este cambio es la demanda de la industria de proporcionar una API que le dé más poder y control al programador. Las implementaciones de controladores específicos del proveedor suelen ser complejas e imponen sobrecargas de rendimiento de la CPU sobre las que los desarrolladores no tienen control. Gran parte de estas sobrecargas se podrían evitar si la API le devolviera más control a los desarrolladores. Un ejemplo de esto es la sobrecarga del controlador que está presente en la administración de recursos de WebGL. Los controladores deben realizar un seguimiento de la vida útil de cada recurso que utiliza el flujo de renderizado. El seguimiento de los recursos por parte del controlador a menudo es innecesario, si se puede suponer que el programador puede realizar esta tarea con mucha menos sobrecarga. Proporcionar a los desarrolladores las herramientas para implementar su propia administración de recursos quita esa responsabilidad a la implementación del controlador y, a menudo, permite mejoras de rendimiento (si se hace correctamente).

Sin embargo, un gran poder conlleva una gran responsabilidad. Es cierto que esta mayor responsabilidad hace que aprender la API WebGPU sea más difícil que aprender la API WebGL. Como sucede con todas las cosas, la primera vez que se enfrenta a algo, puede parecer abrumador o demasiado difícil de aprender, pero si es persistente en su deseo de aprender esta nueva API, las recompensas valdrán la pena.

No te preocupes si eres un principiante absoluto en lo que se refiere a programación gráfica y de computación. Este texto está escrito sin dar suposiciones sobre tu nivel de habilidad actual y presenta ejemplos simplificados para que puedas empezar. Por lo tanto, incluso si nunca antes has escrito aplicaciones web con GPU, deberías estar en buenas manos.

NotePoder de procesamiento

Pensamiento paralelo

Durante más de dos décadas, la industria informática se ha inspirado y motivado por la “ley de Moore”, que observaba que la cantidad de transistores en un chip se duplica cada 18 meses. Esta observación creó la expectativa de que el rendimiento de las aplicaciones de una generación a la siguiente también debería duplicarse. Las mejoras constantes en las tecnologías de fabricación y de procesadores no siempre se han reflejado en las aplicaciones de software. A medida que los nuevos diseños de procesadores se han alejado de superar los límites de “velocidad”, se han orientado hacia una mayor densidad de transistores que aprovecha las modalidades paralelas. La API WebGPU fue diseñada para satisfacer esta importante necesidad. Fue definida y administrada por el consorcio tecnológico sin fines de lucro Khronos. Para dar soporte a los dispositivos futuros, la API WebGPU define un conjunto de mecanismos que, si se cumplen, el dispositivo podría incluirse sin problemas como parte del entorno del navegador web.

La API WebGPU se utiliza para acelerar los cálculos en aplicaciones basadas en la web que tradicionalmente serían manejados por la CPU en el navegador. Si bien la programación de GPU ha sido viable durante las últimas décadas mediante aplicaciones nativas, sus aplicaciones en navegadores han sido limitadas. Dado que la programación de GPU se ha convertido en un recurso fundamental en prácticamente todas las industrias, la API WebGPU no podría haber llegado en un mejor momento. Por ejemplo, la programación de GPU se puede utilizar para acelerar el procesamiento de video, imágenes digitales y señales de audio, física estadística, computación científica, imágenes médicas, visión artificial, redes neuronales y aprendizaje profundo, criptografía e incluso detección de intrusiones, entre muchas otras áreas.

Sin duda, este es un texto muy importante que ofrece a los estudiantes, aficionados, académicos e investigadores una mejor comprensión del mundo de la programación de GPU en general y de las soluciones proporcionadas por la API WebGPU en particular. El libro está escrito de manera que se adapte a los diferentes niveles de experiencia de los estudiantes y se puede utilizar como texto independiente o como guía de referencia para ampliar otro material (búsqueda de proyectos/ejemplos).

Warning

La API WebGPU todavía se encuentra en las últimas fases de prueba/implementación para navegadores modernos (Chrome/Firefox). Para obtener más información o actualizaciones de estado (como errores y qué funciones están disponibles), puede consultar en línea en: https://github.com/gpuweb/gpuweb/wiki/Implementation-Status

Tip¡Piénsalo!

¿Debería utilizar una biblioteca contenedora en lugar de la API WebGPU directamente?

En la actualidad, existen muchas bibliotecas comerciales y gratuitas que se pueden conseguir fácilmente (por ejemplo, Three.js). Sin embargo, cuando se aprende a usar gráficos por computadora, resulta más fácil dominar el tema con mayor comprensión si se escribe una implementación propia (apreciar y comprender ciertos principios que podrían no resultar explícitamente claros si se utilizara una biblioteca existente, por ejemplo, soluciones alternativas ad hoc para errores numéricos y problemas de estabilidad).

Por supuesto, si usaras una biblioteca preexistente (biblioteca madura que ha sido usada y probada por múltiples desarrolladores/jugadores), entonces puedes estar seguro de su estabilidad y ha sido altamente optimizada, y puede ahorrarte tiempo y permitirte enfocarte en otros elementos gráficos (como el efecto de sombreado, no los modelos de carga y la configuración del código repetitivo).

Sin embargo, cuando estás a la vanguardia (es decir, aprovechas las nuevas técnicas o tecnologías), entonces quizás te convenga escribir tu propio código desde cero para entender qué está sucediendo y por qué. Además, si estás desarrollando una función a medida que no es compatible con una biblioteca existente, tienes que decidir cuánto tiempo quieres dedicar a integrar esta nueva función en una biblioteca existente en lugar de escribir una nueva biblioteca o función.

En última instancia, sin embargo, debes comprender la mecánica básica (los conceptos matemáticos, algorítmicos y gráficos), por ejemplo, cómo funciona la canalización de gráficos, etc. (en lugar de simplemente llamar a métodos sin tener idea de qué está sucediendo y por qué).

Note

Existen numerosos libros buenos en los que los autores están más interesados ​​en mostrarte lo inteligentes que son que en tratar de enseñarte un concepto. Por lo tanto, en la mayoría de los casos utilizaremos ejemplos simples y evitaremos tratar de confundirte. El objetivo de este libro es educar, no impresionarte tanto que dejes de leer. Diviértete y relájate.

Todos los principales motores de navegador están trabajando para implementar esta especificación WebGPU. Visita https://caniuse.com/webgpu Para obtener una descripción general de dónde se encuentran todos los navegadores y las diferentes versiones: