在浏览器中使用GPU加速的数学运算

26

我正在为浏览器启动一个项目,需要进行一些复杂的数据处理。

使用GPU加速后,我所使用的算法速度可以提高50-100倍。

我可以使用JavaScript、Flash或其他技术来开发浏览器应用程序。

有没有任何方法可以访问GPU来加速我的数学运算处理?


1
WebGL?那是GPU加速的。 - Raynos
1
似乎Flash GPU加速是由Flash处理的 - 你不能向其发送任意计算请求。 :( http://www.kaourantin.net/2008/05/what-does-gpu-acceleration-mean.html - peteorpeter
Python怎么样?在网页中运行Python是可行的。您可以导入一个Python-GPU库,比如Copperhead或PyCUDA,并在该库中实现您的算法。 - solvingPuzzles
4个回答

25
您可以开始尝试 Khronos 的 WebCL 实验,尽管它还处于初始阶段。像 Internet Explorer、Chrome 和 Opera 这样的大型浏览器目前还没有明确的支持计划,甚至 Microsoft 也没有展示支持 WebGL 的计划。
话虽如此,除了基于 WebGL 着色器的 GPGPU 方法外,WebCL 可能是进行计算的最佳选择。WebCL 本质上是一组 JavaScript 绑定到 OpenCL 的库。因此,WebCL 的发展很可能会与 OpenCL 的发展密切相关。
正如上文所述,截至目前,对 WebCL 的支持还不够标准和普及,但目前已有以下资源可用:
- Khronos 集团在其官方网站上提供了 这里 的资源。 - 诺基亚研究报告了他们在 专门站点 上的实验,包括针对 FireFox 的 WebCL 扩展(目前仅适用于版本 18)。负责该扩展的开发人员还在 https://twitter.com/NokiaWebCL 上有一条推文。 - 三星使用 Safari 浏览器测试的 WebKit 实验可以 在此处 获取。 - 摩托罗拉使用基于 NodeJS 的 OpenCL 实现,可在此处获得。 - Mozilla 似乎也开始了他们自己的 WebCL 开发,尽管我不知道其确切的当前状态。
我最近才开始玩它,但目前还无法提供更多建议,除了“非常有趣”。

1
+1 for WebCL。这正是您想要的,一个稳定的JS API,用于GPU加速。 - Raynos
1
非常好,正是他所需要的;虽然这个程序使用了一个 Firefox 扩展,但我还是把我的回答删掉了,因为这正是我的建议。 - Chad
1
WebCL现在的支持情况如何? - Stefnotch

4
自从我在这个主题上搜索到这个旧问题是顶级搜索结果后,我想提一下更深入的探索让我发现了 gpu.js,它将WebGL封装在实用函数中。
编辑:...然后从那里通过GitHub问题等跳转导致我也发现了 weblas。我还没有对这两个进行比较,将此答案转换为社区Wiki,以防有任何一个有经验的人看到并有所补充。

有没有办法使用这些方法计算8x8矩阵的逆?我需要它来在Web上实现自己的透视变换。 - Ak01

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中得到了压缩的数字,就可以对这些值进行任何必要的操作!

如果你正在寻找一个需要每帧执行的过程的解决方案(比如游戏循环,每n帧更新),那么Flash、GPU和JavaScript之间的这种信息交换可能并不是最优的。

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


0

根据你想要做什么,但我相信在服务器的GPU上运行计算并将其返回给浏览器客户端可能会更容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接