2KB项目,专业的源码交易网站 帮助 收藏 每日签到

SIMD.js 介绍 —— 单指令多数据

  • 时间:2019-01-23 18:33 编辑:2KB 来源:2KB.COM 阅读:425
  • 扫一扫,手机访问
  • 分享
摘要: 英文原文:Int
英文原文:Introducing SIMD.js

SIMD 是单指令多数据(Single Instruction Multiple Data)的缩写 , 意思是一次对多条数据进行操作. 比如, 一条 SIMD 加法指令能同时对多条数据进行加法运算. SIMD 这种能提高运算速度的技术, 在图形处理, 音频处理, 编码, 物理仿真, 加密等领域中得到广泛应用。

 SIMD 一条指令能执行多个操作, 不但提高性能, 而且省电。

SIMD.js

SIMD.js 是 Intel, Google, 和 Mozilla  联合开发的 JavaScript API, 其中包含几个新的类型跟函数. 比如, 其中一个新类叫 Float32x4,  它的功能是将 4 个 float32 值打包放在一起. API 中还包含对这些新类型进行算术运算, 排列, 加载, 存储操作的函数. 目的是在浏览器中实现 SIMD API, 并在现有的硬件上跑起来.

目前主要支持带 SSE 的 x86 平台和 带 NEON 的 ARM 平台.  其他平台(如:MIPS, Power)的支持还在考虑中 .

SIMD.js继承自Dart SIMD规范,它正快速演变为更通用的API,并且覆盖了额外的用例(use case),如那些需要更小的整型,包括Int8x16和Int16x8,以及饱和操作(saturating operations).

SIMD.js是低层次的API,库需要以它为基础来编写,以暴露更高层次的功能,如矩阵操作,超越函数等等.

除了可以在regular JS里面使用之外,将SIMD.js增加到asm.js的工作也在进行之中,这样,它就可以在asm.js程序中使用,如由Emscripten编写的程序.在Emscripten之中,SIMD可以通过内建的自动矢量化,通用SIMD拓展, 或者 新的(正在增加)Emscripten特有的API来实现. Emscripten将围绕SIMD.js实现流行的头文件的子集的包装器,如<xmmintrin.h>,作为某些情况下简化移植SIMD代码的方法.

今天的SIMD.js

SIMD.js API处于活跃的开发之中. 其中ecmascript_simd github仓库当前正作为一个条款规范,同时也提供polyfill的实现以提供给功能,当然,不是加速性能,是存在于浏览器的SIMD API.它也包含一些性能检测,作为SIMD.js基本用法的一些例子.

要查看SIMD.js的实际应用,可点击伴随IDF2014会谈的关于SIMD.js的demo页面.

API已经提交到TC-39, 它已经认可为阶段1(草案). 为其它阶段的准备工作则处于进行之中,正在向最终API一步步靠近.

在Firefox Nightly中实现的SIMD.js正处于活跃的开发之中. Internet Explorer已经将SIMD.js列入 “考虑之中”. 同时,在Chromium的分支之中,也有一个原型的实现.

短SIMD与长SIMD

SIMD的其中一个应用是,加速处理大数组数据。假如,有一个由N个元素构成的数组,并且需要对数组中的每个元素做大致相同的处理,你可以用 N除以任意平台允许的SIMD大小,并且可以运行很多SIMD的子实例。因为N可以无限大,我把此类问题叫作长SIMD问题。

SIMD的另一个应用是加速集合数据的处理。 RGB或RGBA像素(集),XYZW坐标系,或4×4距阵都都是此种应用的例子。 我把诸如此类的问题叫作短SIMD问题。

SIMD 是一个很广的领域,它的最短和最长的边界并不明确。但在一个高层次的角度来说,这两种风格差别很大,甚至是描述它们的术语也不一样:在短SIMD的世界里,将标量值拷贝到一个向量的每一个元素之中的操作称为"splat";而在长向量世界里,相似的操作则称为"broadcast"。

SIMD.js 主要是"短"风格的API,它适用于解决短SIMD的问题。SIMD.js也可以用作解决长SIMD的问题。相对于平常的标量代码,它有较明显的加速。然而,对于现在的一些CPU,它的固定长度类型不能实现最大的性能。因此,仍有开发其它的解决方案来提升性能的空间。

可移植性和性能

在两方面的需求之中,SIMD.js 的许多部分都有天然的冲突,一方面是希望拥有稳定运行在所有重要平台的API,另一方面是希望在每一个单独的平台下都尽可能快的运行。

幸运的是,有一套核心的操作集合可以稳定存在于广泛的平台之中。这些操作包括大多数的基础算术运算操作,它们组成了 SIMD.js 的核心。在这个集合中,几乎没有额外开销,因为许多相关的 SIMD API 指令直接映射到单独的指令。

但是,也有许多操作在一个平台运行良好,却在其它平台运行很差.这会导致令人吃惊的性能差异。当前的方法是让SIMD.js API集中于它所擅长的事情,并尽可能降低性能差异。它也会专注于提供可移植的方法。综合来看,目标在于保证,在一个平台运行良好的程序,在其它平台也可以运行,并运行的很好。

在SIMD.js未来的迭代之中,我们希望拓展作用范围,除了包含潜在平台下的查询功能,还包含更多的功能。类似于WebGL,这将允许程序决定什么功能对它们可用,这样,它们可以决定是否回退到未更新的代码,或屏蔽可选功能。

全面视角

SIMD.js 将会在广大的范围内加速现今高要求的应用程序,包括游戏,视频,音频操控,科学模拟以及其它Web应用程序。应用程序将可以直接使用SIMD.js API。库则使用SIMD.js来暴露高层级的接口以供应用程序使用。Emscripten 将使用流行的SIMD来编译C++,以生成优化后的SIMD.js代码。

未来,SIMD.js 将会持续增长,将会提供更广泛的功能:我们希望SIMD.js最终也会有长SIMD风格的API。这样,两种API可以相互合作,类似于OpenCL结合显式向量类型和隐式长向量潜在编程模型的平行性。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部