写点什么

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

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

关注

评论

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

陷入企业ERP管理困境?这些才是破局密码

YG科技

小间距led显示屏型号主要有哪几种?有什么优势?

Dylan

显示器 LED显示屏 led显示屏厂家

Xilisoft Video Converter Ultimate for Mac(曦力音视频转换专家) v7.8.27中文直装版

mac

苹果mac Windows软件 Xilisoft Video 视频转换软件

监控分析工具比较 (Zipkin, Skywalking, Pinpoint, CAT)

周晓宁

Adobe Photoshop 2024 for Mac v25 正式版 支持神经滤镜 Neural Filters 中文激活版 intel/M1通用(ps2024)

晴雯哥

文心一言 VS 讯飞星火 VS chatgpt (108)-- 算法导论10.1 6题

福大大架构师每日一题

福大大架构师每日一题

关于A/B 测试系统的基本知识

QE_LAB

A/B 测试 测试技术

简单的3D建模软件 Metasequoia 4密钥激活版

mac大玩家j

3D Mac软件 建模软件 3d建模

图文结合丨Prometheus+Grafana+GreatSQL性能监控系统搭建指南(上)

GreatSQL

greatsql

百度文心大模型4.0正加紧训练,即将发布

阿Q说代码

大模型训练 大模型 百度文心

C++ 使用getline()从文件中读取一行字符串

智趣匠

Flux.never是什么

0x5d0de9

Java WebFlux SpringWebflux

ARTS-WEEK8(23.10.1-23.10.6)

EchoZhou

基于 ACK Fluid 的混合云优化数据访问(一):场景与架构

阿里巴巴云原生

阿里云 容器 云原生 混合云 ACK

运维 | 解决 CentOS 终端主机名显示-bash-4.2 问题

Appleex

centos 运维

数据库:定义、历史及分类

Frank

最新intellij idea 2023 Mac破解版安装详细步骤 附IntelliJ IDEA2023激活码 支持M1/M2

晴雯哥

OpenObserve 可观测平台探究

jupiter

Prometheus 可观测平台 OTLP OpenObserve observabili

亚马逊收购Anthropic,意在切断英伟达的芯片垄断

B Impact

DevOps|研发效能解决的是企业效率问题

laofo

DevOps cicd 研发效能 持续交付 效能度量

网络文件安全共享工具Dropshare 5免激活最新版

胖墩儿不胖y

Mac软件

Groovy初学者指南

Java随想录

Java Groovy

如何利用动态配置中心在JavaAgent中实现微服务的多样化治理

华为云开源

云原生 微服务治理

OpenTiny 系列产品 TinyEngine 低代码引擎在 HC 大会正式宣布开源~(源码已开放)

OpenTiny社区

开源 前端 低代码

深度学习算法:从模仿到创造

小魏写代码

【MySQL】就这一篇帮你解决 MySQL 磁盘占用过高的问题

非晓为骁

MySQL Docker Binary Log 磁盘空间 general log

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