GPU 在浏览器中加速数学运算
GPU accelerated math in the browser
我正在为浏览器启动一个项目,该项目需要一些复杂的数据处理。使用 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的访问点,我主要只是想指导您找到一个可能的解决方案。
- 如何使用jQuery在动画中期加速动画
- 加速我的复杂函数绘图仪(canvas+javascript)
- 哪个布尔运算更快<或者<=
- 使用JavaScript进行乘法运算
- 粒子获胜't加速
- 如何在一个html页面上使用js进行2次乘法运算
- 加速单纯形算法
- React.js如何使用虚拟DOM加速渲染
- 我可以在不使用乘法运算符“”的情况下进行乘法运算吗*"在JavaScript中
- 不是每次NaN显示时都在jquery中进行乘法运算
- 如何使用javascript禁用firefox中的硬件加速
- 在JS中返回数组的大整数运算
- 反向位AND运算
- 在Dojo中加速TitlePane的动画
- 滚动位置 (scrollTop) 硬件是否在浏览器中加速
- WebGL VS Canvas 2D 硬件加速
- 此程序中按位运算的目的是什么
- 指数值的算术运算
- 如何在三元运算的结果上执行多个函数
- GPU 在浏览器中加速数学运算