2011-05-17 27 views
23

Estoy comenzando un proyecto para navegadores que requiere un procesamiento de datos complejo. El algoritmo que estoy usando es 50-100 veces más rápido cuando se acelera con una GPU.GPU aceleró matemáticas en el navegador

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?

+1

WebGL? Eso es GPU acelerado. – Raynos

+1

Parece que la aceleración flash de la GPU se gestiona _por flash_ - no puede enviarle solicitudes de cálculo arbitrarias. :(http://www.kaourantin.net/2008/05/what-does-gpu-acceleration-mean.html – peteorpeter

+0

¿Qué hay de Python? Es posible ejecutar Python en una página web. Podría importar una biblioteca de Python-GPU como Copperhead o PyCUDA e implementar sus algoritmos en esa biblioteca. – solvingPuzzles

Respuesta

25

Puede comenzar a experimentar con WebCL de Khronos, aunque todavía está en pañales. Los grandes jugadores como Internet Explorer, Chrome y Opera aún no muestran planes claros de soporte, y Microsoft ni siquiera muestra ningún plan para el soporte de WebGL.

Dicho esto, aparte de un enfoque de GPGPU basado en sombreado WebGL, WebCL podría ser su mejor apuesta para el cálculo. WebCL es en esencia un conjunto de enlaces de JavaScript para OpenCL. Como tal, es muy probable que los desarrollos estén estrechamente relacionados con los de OpenCL.

Si bien, como se ha dicho, el apoyo a webcl es a partir de este momento aún no estándar ni generalizada, en la actualidad hay disponibles los siguientes recursos:

  • El grupo Khronos tiene el sitio web oficial here.
  • Nokia Research informa sus experimentos en their dedicated site, incluida una extensión WebCL para Firefox (Versión 18 solo por el momento). El desarrollador que trabaja en esta extensión también tiene un Twitter al https://twitter.com/NokiaWebCL.
  • Los experimentos de Samsung para WebKit probado con el navegador Safari son available here.
  • Motorola tiene una implementación basada en NodeJS de OpenCL available here.
  • Parece que Mozilla se activó bien con su propio WebCL developments, aunque su estado actual exacto es desconocido para mí.

Recientemente comencé a jugar con él, pero todavía no puedo hacer recomendaciones más allá de "bastante divertido".

+1

+1 para WebCL. Eso es exactamente lo que quiere, una sólida API de JS para aceleración de GPU. – Raynos

+1

+1 Muy bien, justo lo que estaba buscando; eliminé mi respuesta, aunque esto sí utiliza una extensión de FireFox, que es lo que sugerí que debería hacerse. – Chad

+1

¿Cómo se ve el soporte de WebCL ahora? – Stefnotch

0

dependiendo de lo que quiere hacer, pero estoy seguro de que podría ser mucho más fácil de ejecutar los cálculos en la GPU del servidor y obtener de vuelta al cliente de navegador

0

Sería interesante ver a alguien tire de esta apagado con Flash y Javascript. Depende completamente de la frecuencia con la que debe hacer los cálculos.

Si solo necesita realizar una iteración de cálculos (esencialmente, un pase de "render" o una llamada de sorteo), puede configurar su VertexShader3D y FragmentShader3D como lo haría normalmente para cualquier proyecto de Stage3D en Flash, y a continuación, devuelve los resultados del BitmapData de esa representación:

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

Luego, puede 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ás que ver cómo se usa la clase ExternalInterface para communivate entre Flash y Javascript.

Una vez que tenga sus números crujidos en JavaScript, ¡haga lo que tenga que ver con esos valores!

Este intercambio de información entre Flash, la GPU, y JavaScript podría no ser óptima si usted está buscando una solución para un proceso que necesita ser ejecutado "por cuadro" (como un juego de bucle, la actualización de todos los n- marcos).

Nota: Perdón por la respuesta incompleta, pero la mayor parte del tiempo solo quería guiarlo hacia una posible solución si aún consideraba Flash como su punto de acceso a la GPU.

1

Dado que esta pregunta anterior fue un éxito de búsqueda superior para mí sobre este tema, pensé que mencionaría que una exploración más profunda me llevó a gpu.js, que ajusta WebGL en las 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 wiki de la comunidad en caso de que alguien con experiencia en cualquiera de estos vea esto y tenga algo que agregar.