2011-05-17 102 views
23

我开始了一个需要一些复杂数据处理的浏览器项目。 当使用GPU加速时,我使用的算法速度提高了50-100倍。GPU加速数学浏览器

我可以在浏览器中使用JavaScript,Flash或其他技术。 有什么方法可以访问GPU来加速我的数学处理?

+1

WebGL?这是GPU加速。 – Raynos 2011-05-17 19:10:21

+1

看起来像闪存GPU加速处理_by flash_ - 您无法向其发送任意计算请求。 :(http://www.kaourantin.net/2008/05/what-does-gpu-acceleration-mean.html – peteorpeter 2011-05-17 19:21:36

+0

Python怎么样?让Python运行在网页上是可行的,你可以导入一个Python-GPU库例如Copperhead或PyCUDA,并在该库中实现您的算法 – solvingPuzzles 2012-12-29 05:09:29

回答

25

您可以开始尝试Khronos的WebCL,尽管这仍处于起步阶段。像IE,Chrome和Opera这样的大公司目前还没有明确的支持计划,微软甚至没有提供任何WebGL支持计划。这就是说,除了基于WebGL着色器的GPGPU方法之外,WebCL可能是您计算的最佳选择。 WebCL本质上是一组到OpenCL的JavaScript绑定。因此,发展最有可能与OpenCL的发展密切相关。

虽然如说,对WebCL支持,因为这一刻没有标准,也不普遍,目前有以下可用资源:

  • Khronos组织具有官方网站here
  • 诺基亚研究部报告其在their dedicated site上的实验,其中包括FireFox的WebCL扩展(目前只有第18版)。致力于此扩展的开发人员还在https://twitter.com/NokiaWebCL上有Twitter。
  • 三星用Web浏览器测试Safari浏览器的实验是available here
  • 摩托罗拉有一个OpenCL的基于NodeJS的实现available here
  • Mozilla本身似乎已经变得活跃了,他们自己的WebCL developments,尽管目前确切的状态对我来说是未知的。

我最近才开始玩这个游戏,但是现在还不能提出超出“相当有趣”的建议。

+1

+1 for WebCL这正是您想要的,一个可靠的JS API for GPU Acceleration – Raynos 2011-05-17 19:42:45

+1

+1非常好,他正在寻找的东西;删除了我的答案,尽管这确实使用了FireFox扩展,这是我建议必须完成的。 – Chad 2011-05-17 20:15:29

+1

WebCL的支持现在是什么样的? – Stefnotch 2016-10-09 14:31:59

0

取决于你想要做什么,但我相信它可能是更容易运行在服务器上的GPU的计算,让他们返回给浏览器客户端

0

看到有人拉这会很有趣用Flash和Javascript关闭。这完全取决于你必须多频繁地进行计算。

如果您只需执行一次迭代计算(实质上是一次“渲染”过程或一次绘制调用),则您可以像设置Flash中的任何Stage3D项目一样设置VertexShader3D和FragmentShader3D,并且然后从该渲染的BitmapData返回结果:

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

然后,您可以将信息传递给Javascript。我不确定BitmapData是否可以直接传递,但我相当积极,您必须首先序列化数据(作为数组或字符串等)。你必须看看如何使用ExternalInterface类在Flash和Javascript之间进行通信。

一旦你在JavaScript中得到了你的嘎吱嘎嘎的数字,就不管你用这些值做什么!

如果您正在寻求一个需要“每帧”执行的进程的解决方案,那么Flash,GPU和JavaScript之间的信息交换可能并不是最佳的(如游戏循环,帧)。

注意:对不完整的答案抱歉,但我主要只是想引导您进入一个可能的解决方案,如果您仍然在考虑使用Flash作为您的GPU访问点。

1

由于这个老问题是我在这个主题上的热门搜索热门,所以我想我会提到一些进一步的探索使我转向了gpu.js,它将WebGL封装在实用功能中。

编辑:...并跳过GitHub问题等从那里导致我也weblas以及。我还没有比较这两个,但将这个答案转换为社区wiki,以防某些具有这些经验的人看到了这一点,并且需要添加内容。