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

GPU accelerated math in the browser

本文关键字:运算 加速 浏览器 GPU      更新时间:2023-09-26

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

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

你可以开始尝试Khronos的WebCL,尽管它仍处于起步阶段。像Internet Explorer,Chrome和Opera这样的大玩家还没有明确的支持计划,Microsoft甚至没有显示任何支持WebGL的计划。

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

虽然如前所述,对 WebCL 的支持目前还不是标准或广泛的,但目前有以下资源可用:

  • Khronos集团在这里有官方网站。
  • 诺基亚研究在其专用网站上报告其实验,包括FireFox的WebCL扩展(目前仅为版本18)。开发此扩展程序的开发人员在 https://twitter.com/NokiaWebCL 也有一个Twitter。
  • 三星使用 Safari 浏览器测试的 WebKit 实验可在此处获得。
  • 摩托罗拉有一个基于NodeJS的OpenCL实现,可以在这里找到。
  • Mozilla本身似乎已经变得活跃,与他们自己的WebCL开发有关,尽管我不知道它的确切当前状态。

我最近才开始自己玩它,但除了"相当有趣"之外,还不能提出任何建议。

由于这个老问题是我在这个主题上搜索最多的,我想我会提到一些进一步的探索将我带到了 gpu.js,它将 WebGL 包装在实用程序函数中。

编辑:。。。从那里跳过GitHub问题等,我也想到了weblas。我还没有对这两者进行比较,将此答案转换为社区维基,以防有其中任何一个有经验的人看到这一点并有要补充的内容。

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

看到有人用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的访问点,我主要只是想指导您找到一个可能的解决方案。