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

时间:2011-05-17 19:05:29

标签: javascript html flash gpu

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

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

4 个答案:

答案 0 :(得分:25)

你可以开始尝试使用Khronos的WebCL,尽管那还处于起步阶段。像Internet Explorer,Chrome和Opera这样的大公司还没有明确的支持计划,微软甚至没有展示任何支持WebGL的计划。

话虽如此,除了基于WebGL着色器的GPGPU方法之外,WebCL可能是您计算的最佳选择。 WebCL本质上是一组与OpenCL的JavaScript绑定。因此,开发最有可能与OpenCL的开发密切相关。

虽然如上所述,对WebCL的支持目前还不是标准的,也不是普遍的,但目前有以下资源可用:

  • Khronos小组有官方网站here
  • 诺基亚研究院在their dedicated site上报告其实验,包括FireFox的WebCL扩展(目前仅限第18版)。处理此扩展程序的开发人员也在https://twitter.com/NokiaWebCL处有一个Twitter。
  • Samsung使用Safari浏览器测试的WebKit实验是available here
  • 摩托罗拉有一个基于NodeJS的OpenCL available here实现。
  • Mozilla本身似乎已经变得很活跃了他们自己的WebCL developments,虽然它的确切当前状态对我来说是未知的。

我最近才开始玩它,但是还不能提出“非常有趣”之外的任何建议。

答案 1 :(得分:4)

由于这个老问题对我来说是一个关于这个主题的热门搜索,我想我还提到了一些进一步的探索让我进入了gpu.js,它将WebGL包含在实用函数中。

编辑:......然后从那里跳过GitHub等问题导致我weblas。我还没有对这两者进行比较,将这个答案转换为社区维基,以防有这方面经验的人看到这一点并有一些补充。

答案 2 :(得分:0)

取决于你想做什么,但我相信在服务器的gpu上运行计算并将它们带回浏览器客户端可能会容易得多

答案 3 :(得分: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访问点,我大多只是想引导你找到一个可能的解决方案。