BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

SIMD.js:为计算密集型应用而生的JavaScript API

| 作者 李士窑 关注 0 他的粉丝 发布于 2014年11月21日. 估计阅读时间: 4 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

SIMD(Single Instruction Multiple Data))即单指令多数据流,它是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据矢量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。该技术在图形处理、音频处理、编码、物理仿真、加密等领域中都得到了广泛应用,已成为现代CPU处理器最重要的功能设计。然而对于现代网页相当重要的JavaScript代码,却一直没有以处理器的SIMD指令集来提升性能。于是,Intel、Google和Mozilla根据Dart SIMD规范联合开发了JavaScript API——SIMD.js,它包括许多新类型以及对这些类型进行算术运算、排序、加载、存储等操作的方法。SIMD.js的目的是在浏览器中实现SIMD API,并在现有的硬件上运行。SIMD.js不需要任何原生码或原生插件,仅用JavaScript就能够开发出计算密集应用(如游戏和媒体处理),且任何能够运行JavaScript的地方都可以运行SIMD.js。不过,SIMD.js主要是“短”风格的API,比较适用于解决短SIMD(Short SIMD)问题,所以相对于平常的标量代码,它有较明显的加速。然而,对于现在的一些CPU,它的固定长度类型不能实现最大的性能。因此,仍需开发其它的解决方案来提升性能。

目前SIMD.js主要支持具有SSE 的x86平台和具有NEON的ARM平台,而MIPSPower等其他平台的支持还在考虑中。SIMD.js正快速演变为更通用的API。SIMD.js API正处于活跃的开发之中,已经进行到草案阶段,且为其它阶段的准备工作也在进行中,正向最终API一步步靠近。另外,在支持Firefox Nightly版本中SIMD.js正处于积极的开发之中,Internet Explorer已考虑加入SIMD.js。同时,在Chromium(Chrome浏览器的引擎)的分支中,也有一个原型的实现。在Firefox Nightly版本中启用SIMD后的测试结果显示,JavaScript计算曼德尔布罗特集合的速度提升至4倍。

Hack News上关于SIMD.js讨论已经有数百条,多数人肯定了开发SIMD.js提升JavaScript效率举措,还有人提出了新增对WebCL的支持的建议。有人认为把SIMD应用到一个编程语言中是不合适的,做了不该属于自己该做的事情,而最好的方式是使用增强类型接口和编译技术,并添加语言原语以帮助代码的生成。另外还指出曼德尔布罗特集合计算例子是一个通用的例子,不能充分证明SIMD.js对JavaScript加速效果。

未来,SIMD.js将会提供更广泛的功能,并提升更大范围应用的性能,尤其如游戏、视频、音频操控、科学模拟等对性能要求比较高的应用。另外,Emscripten也将使用流行的SIMD来编译C++,以生成优化后的SIMD.js代码;长短SIMD风格的API将能够相互合作。更多关于SIMD.js的详细信息请查看Mozilla官方的一篇关于SIMD.js的介绍EcmaScript strawman 提案以及、Axel Rauschmayer博士先生的一篇关于SIMD.js的博客


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT