50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

  • 2014-11-20
  • 本文字数:1238 字

    阅读完需:约 4 分钟

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 平台,而 MIPS Power 等其他平台的支持还在考虑中。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 )关注我们,并与我们的编辑和其他读者朋友交流。

2014-11-20 08:283345
用户头像

发布了 92 篇内容, 共 50.8 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

程序员必读十大电子书

六月的雨在InfoQ

电子书 Java工程师成神之路

点云标注在自动驾驶中的实时性要求

数据堂

来聊点认证与授权的话题

为自己带盐

.net core OAuth 2.0 Openiddict

点云标注在自动驾驶中的发展趋势

数据堂

Java基础!Java反射机制!!

java易二三

Java 编程 互联网 计算机

香港VPS大揭秘:轻松打造超高流量网站

一只扑棱蛾子

VPS 香港VPS

当流计算邂逅数据湖:Paimon 的前生今世

Apache Flink

大数据 flink 实时计算

git撤销某一次commit提交

树上有只程序猿

git

软件测试/测试开发丨Python 装饰器 学习笔记

测试人

Python 程序员 软件测试 装饰器 测试开发

【福利活动】深度体验OpenHarmony对接华为云IoT

OpenHarmony开发者

OpenHarmony

门槛一降再降,易用性大幅提升!Milvus 2.2.12 持续升级中

Zilliz

Milvus Zilliz 向量数据库

HuntingNFT 全新玩法引爆市场,GameFi掘金新热土?

鳄鱼视界

我的 Obsidian 笔记跨设备同步方案

专注前端开发

工具 笔记 Obsidian

提高代码质量!详解在Gradle项目中使用PMD的正确姿势

树上有只程序猿

Gradle

鸿煦科技刘敏:小程序云开发降本增效实践之路

TRaaS

小程序 支付宝 开发

给世界一个更好的选择,“龙蜥+超级探访”首期嘉宾预告片震撼来袭!

OpenAnolis小助手

开源 操作系统 龙蜥社区 统信软件 超级探访

QQ开展外挂专项整治,守护用户社交环境安全

极客天地

九州八荒录H5游戏详细图文架设教程

echeverra

游戏开发

OpenSSL 3.0.0 设计(一)|介绍、术语与架构

铜锁开源密码库

开源 算法 信息安全 密码学 铜锁

点云标注在自动驾驶中的数据安全问题

数据堂

你了解Vue3组合式API吗?

OpenTiny社区

Vue 前端框架 开源组件库

2 种方式查找极狐GitLab 容器镜像 Tag,几分钟快速构建私有化部署实例

极狐GitLab

DevOps gitlab Helm 容器镜像 Omnibus package

如果你在选型低代码平台,可以从这5个角度去分析抉择

互联网工科生

源码 低代码 系统集成 私有化部署

腾讯云 Cloud Studio 实战训练营活动招募中

CODING DevOps

活动 cloudstudio 云端 IDE

实时数仓:Iceberg

腾讯云大数据

数据仓库

设计原则 — KISS & YAGNI

Lemoon Can

设计原则 KISS YAGNI

SIMD.js:为计算密集型应用而生的JavaScript API_JavaScript_李士窑_InfoQ精选文章