Matemáticas aceleradas por GPU en el navegador


Estoy comenzando un proyecto para navegadores que requiere un procesamiento de datos complejo. El algoritmo que estoy usando es 50 - 100x más rápido cuando se acelera con GPU.

Podría usar JavaScript, Flash u otras tecnologías con el navegador. ¿Hay alguna forma de que pueda acceder a la GPU para acelerar el procesamiento de mis matemáticas?

Author: micho, 2011-05-17

4 answers

Podrías empezar a experimentar con el WebCL de Khronos, aunque todavía está en su infancia. Los grandes jugadores como Internet Explorer, Chrome y Opera no muestran planes claros para el soporte por el momento, con Microsoft ni siquiera muestra ningún plan para el soporte WebGL.

Dicho esto, aparte de un enfoque GPGPU basado en sombreadores WebGL, WebCL podría ser su mejor opción para la computación. WebCL es en esencia un conjunto de enlaces JavaScript a OpenCL. Como tal, es muy probable que los acontecimientos estén estrechamente vinculados a los de OpenCL.

Si bien, como se ha dicho, el soporte para WebCL aún no es estándar ni generalizado, actualmente existen los siguientes recursos disponibles:

  • El grupo Khronos tiene el sitio web oficial aquí.
  • Nokia Research informa de sus experimentos en su sitio dedicado , incluyendo una extensión Webl para FireFox (Versión 18 solo por el momento). El desarrollador que trabaja en esta extensión también tiene un Twitter en https://twitter.com/NokiaWebCL .
  • Los experimentos de Samsung para WebKit probados con el navegador Safari están disponibles aquí.
  • Motorola tiene una implementación basada en NodeJS de OpenCL disponible aquí .
  • Mozilla en sí parece que se han convertido en activo estaba bien con sus propios WebCL desarrollos , aunque su estado actual exacto es desconocido para mí.

Solo he empezado a jugar con él recientemente, pero todavía no puedo hacer ninguna recomendaciones más allá de "bastante divertido".

 25
Author: Bart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-08 08:44:59

Dado que esta vieja pregunta fue un éxito de búsqueda superior para mí en este tema, pensé que mencionaría que alguna exploración adicional me llevó a gpu.js, que envuelve WebGL en funciones de utilidad.

EDITAR: ...y saltando a través de problemas de GitHub, etc. desde allí me llevó a weblas también. Todavía no tengo una comparación de estos dos, convirtiendo esta respuesta a community wiki en caso de que alguien con experiencia en cualquiera de estos vea esto y tenga algo que agregar.

 2
Author: Dan Percival,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-15 13:59:39

Dependiendo de lo que quieras hacer, pero estoy seguro de que podría ser mucho más fácil ejecutar los cálculos en la gpu del servidor y devolverlos al cliente del navegador

 0
Author: flow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-30 20:24:38

Sería interesante ver a alguien hacer esto con Flash y Javascript. Depende completamente de la frecuencia con la que tendría que hacer los cálculos.

Si solo necesita realizar una iteración de cálculos (esencialmente, un pase de "renderizado" o una llamada de dibujo), puede configurar su VertexShader3D y FragmentShader3D como lo haría normalmente para cualquier proyecto Stage3D en Flash, y luego devolver los resultados de los datos de bits de ese renderizado:

//You probably want this to be the same dimensions as your context3D dimensions:
_context3D.drawToBitmapData(yourBitmapDataDestination);

Entonces usted podría pasar la información a Javascript. No estoy seguro de si BitmapData se puede pasar directamente, pero estoy bastante seguro de que tendrá que serializar los datos primero (como una matriz, o Cadena, etc.). Tendrá que ver cómo se usa la clase ExternalInterface para comunicarse entre Flash y Javascript.

Una vez que tengas tus números crujidos en JavaScript, ¡haz lo que tengas que hacer con esos valores!

Este intercambio de información entre Flash, la GPU y JavaScript podría no ser óptimo si estás buscando una solución para un proceso que necesita ser ejecutado "por fotograma" (como un bucle de juego, actualizando cada n fotogramas).

Nota: Lo siento por la respuesta incompleta, pero sobre todo solo quería guiarlo en una posible solución si todavía estaba considerando Flash como su punto de acceso a la GPU.

 0
Author: bigp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-16 17:27:25