限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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

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

关注

评论

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

【Nacos源码之配置管理 五】为什么把配置文件Dump到磁盘中

石臻臻的杂货铺

nacos 10月月更

Surpass Day——Java语法基础

胖虎不秃头

Java 10月月更 se

刘奇:能否掌控复杂性,决定着分布式数据库的生死存亡

TiDB 社区干货传送门

数据库前沿趋势

竟然还有人说ArrayList是2倍扩容,今天带你手撕ArrayList源码

一灯架构

Java java面试 10月月更

【一Go到底】第七天---运算符

指剑

Go golang 10月月更

Collections之ArrayList源码解读(七)

知识浅谈

ArrayList 10月月更

Python基础(十) | Numpy详细教程

timerring

Numpy库 10月月更

单模光缆与多模光缆,网络工程师必知的光缆类型

wljslmz

网络工程 10月月更 单模光纤 多模光纤 弱电

大数据开发的方法有哪些

小谷哥

大数据ELK(十五):Elasticsearch SQL简单介绍

Lansonli

ES 10月月更

OpenMLDB + OneFlow: 手把手教你快速链接特征工程到模型训练

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

深度解密 OpenMLDB 毫秒级实时在线特征计算引擎

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

直播预告 | 第四范式Tech Day火热来袭,OpenMLDB 与你 8月11日线上见

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

传统架构面临的挑战及上云的优势

穿过生命散发芬芳

企业上云 10月月更

Python基础(八) | 万字详解深浅拷贝、生成器、迭代器以及装饰器

timerring

装饰器 Python Monad 迭代器 生成器 10月月更

Python基础(九) | time random collections itertools标准库详解

timerring

random Collections time 10月月更

Surpass Day——Java面向对象的创建和使用

胖虎不秃头

Java 10月月更 se

免费申请和使用IntelliJ IDEA商业版License指南

程序员欣宸

ide 10月月更 ieda

学习大数据培训是否比较靠谱

小谷哥

OpenMLDB Meetup No.5 会议纪要

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

打造友邻式多元生态,支撑工商银行、平安科技、中国人寿财险、杭州银行的创新实践

TiDB 社区干货传送门

数据库前沿趋势

前端培训机构选择需要注意什么?

小谷哥

一个 ExpressionChangedAfterItHasBeenCheckedError 错误的解决过程

汪子熙

typescript 前端开发 angular web开发 10月月更

C++学习---cstdio的源码学习分析07-刷新文件流函数fflush

桑榆

c++ 源码分析 10月月更

【Nacos源码之配置管理 六】集群模式下服务器之间是如何互相感知的

石臻臻的杂货铺

10月月更 nacso

前端培训学习路线比较靠谱

小谷哥

学习编程既要追根溯源、又要紧跟时代步伐

玄兴梦影

c 编程 语法

TiKV缩容下线异常处理的三板斧

TiDB 社区干货传送门

实践案例 管理与运维 故障排查/诊断 扩/缩容

【LeetCode】最大升序子数组和Java题解

Albert

LeetCode 10月月更

Surpass Day——Java面向对象的封装、构造方法

胖虎不秃头

Java 10月月更 se

java培训与线上自学哪个比较好

小谷哥

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