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:283379
用户头像

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

关注

评论

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

关于net6中宿主模型的一点点看法

喵叔

28天写作 12月日更

运维意识

搬砖的周狮傅

开发感想

为什么 MongoDB 使用 B 树

编程江湖

mongodb

给弟弟的信第28封|那些在大学赚到第一桶金的大神

大菠萝

28天写作

架构训练营模块三作业

沈益飞

架构训练营 架构师训练营 4 期

28天写作感想

Tiger

28天写作

架构实战营 - 模块 3 课后作业

tony

Golang的通道复用上手(三)

liuzhen007

go语言 28天写作 12月日更

spring 源码解析一、概述

xzy

Java spring spring源码

ClickPaaS 胡柏:开源不是童话,它背后的商业逻辑正是其哲学的另一面体现 I OpenTEKr 大话开源 Vol.3

OpenTEKr

大话开源

架构训练营第四期 作业3

supermenG

架构师训练营 4 期

发现新视界——视觉计算将如何改变生产方式

阿里云弹性计算

阿里云 云栖大会 视觉计算

NFS(网络文件系统)配置(Ubunut/Deepin等系统)

SkyFire

Linux NFS

正转与反转(30/28)

赵新龙

28天写作

实践解析可视化开发平台FlinkSever优势

华为云开发者联盟

flink kafka 流计算 华为FusionInsight MRS FlinkSever

学生管理系统架构文档

皓月

架构实战营 #架构实战营 「架构实战营」

Thinking Agile 2021,Being Agile 2022

Bruce Talk

敏捷 随笔 Agile

Mybatis使用的9种设计模式,你知道几种

编程江湖

设计模式 JAVA开发

直击前沿技术:云原生应用低代码开发平台实践

博文视点Broadview

比格云CEO 诸葛辉:本土开源力量的崛起,正为底层技术基础设施掀起一股中国风 I OpenTEKr 大话开源 Vol.4

OpenTEKr

大话开源

性能分析之系统资源饱和度

zuozewei

Linux 性能分析 12月日更

模块三作业

whoami

「架构实战营」

关于Kafka分区leader迁移的感想

Kafka中文社区

拾起卖数字化平台亮相2021全国废钢铁大会引热烈反响 数字化建设助推废钢产业高质量发展

InfoQ 天津

如何用 Python 自动发送微博?

老表

Python selenium 跟老表学云服务器 自动化实战

28天写作挑战复盘

圣迪

灵魂洗礼

瞰源 | 假领子的流行经济学看开源

OpenTEKr

狄安瞰源

热更新技术在游戏 SDK 中的实践

bilibili游戏技术

2021年,你读过哪些书?(29/28)

赵新龙

28天写作

瞰源 | 别逗了,同学!开源不是点赞送礼

OpenTEKr

狄安瞰源

mysqlx学习

SkyFire

mysqlx

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