【问题标题】:Does browser JavaScript allow for SIMD or Vectorized operations?浏览器 JavaScript 是否允许 SIMD 或矢量化操作?
【发布时间】:2017-08-12 13:20:56
【问题描述】:

我想用 JavaScript 编写需要大量数值计算的应用程序。但是,我对客户端 JavaScript 中高效的类线性代数计算的状态感到非常困惑。似乎有很多方法,但没有明确的迹象表明他们准备好了。它们中的大多数似乎对允许计算的向量和矩阵的大小有限制。

WebGL

显然允许在 GPU 上进行矢量和矩阵计算,但我不清楚这些限制。 Attempted wrappers 在这个库周围似乎限制了矩阵和向量的大小。这是实际限制(浏览器不支持其他任何东西)还是只是开发限制(需要有人编写代码)?

WebCL

WebCL 是提议的 OpenCL 浏览器级实现,但 appears to be stuck in development

WebGPU

Apple 最近推出了 WebCL 的替代方案 WebGPU。到目前为止,有一个原型和演示,但我不清楚这是否会被广泛采用。

SIMD

Mozilla 有 put out an API for SIMD operations,但它只提供实验性支持。

JavaScript 是否支持浏览器端的矢量化计算?


注意事项:

  • 我的问题不是“什么是 JavaScript 中数值计算的好库”,而是“JavaScript 中是否可以进行矢量化操作?”一个可接受的答案将链接到在非实验性浏览器中工作的矢量化计算演示。

  • 我可能对 SIMD、矢量化和 GPU 计算感到困惑。我认为在这种情况下将它们同义使用是可以的,因为它们都允许使用硬件加速进行涉及高维向量的高效计算。

【问题讨论】:

  • 我不擅长 JavaScript。有一个胖客户端很好,但我认为客户端的 SIMD 指令可能会导致很多问题。顺便说一句,您必须检查您在不同架构中的 Web 应用程序,以查看用于 javascript 的实验性 SIMD 库的效率。您必须考虑英特尔支持不同的 SIMD 技术 128 位、256 位和 512 位指令,在不同的操作系统、编译器、ISA 等中存在各种兼容性问题,这只是英特尔!如果您在服务器端使用 java,有一些方法可以在服务器端使用 SIMDization,这可能很有用。

标签: javascript matrix vector vectorization simd


【解决方案1】:

SIMD.js 是 JavaScript 的一部分。在 Firefox 和 Chrome 中也有实验性实现,但现在 SIMD.js 已退出 TC39 的积极开发并从阶段 3 中删除。Web 浏览器不再追求实现。暴露于网络的 SIMD 操作正在WebAssembly 内积极开发,其操作基于 SIMD.js 操作。

WebAssembly SIMD 状态

LLVM Wasm 后端和 Web 引擎中 SIMD 的状态:
Proposal: Implementation Status

【讨论】:

    【解决方案2】:

    JavaScript 中 SIMD 的状态部分是一个实际和开发问题。

    实用

    Web browsers are kind of like virtual machines。这意味着他们需要大量的硬件驱动程序。为 WebGL 公开少数着色器和诸如此类的驱动程序与 SIMD 操作所需的任意内核执行显着不同。

    发展中

    假设,可以封装 WebGL 使其成为通用 GPU 计算机,并且有人尝试使用 gpgpu.js。但是,它得到了严格的支持,并且可能比直接将内核管道传输到 GPU 慢。

    结论

    网络还没有为 SIMD 做好准备。有不少大公司正在努力使其做好准备。在那之前,您将不得不依赖 WebWorkers 进行大批量的数值计算。

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 2011-05-06
      • 1970-01-01
      • 2010-12-25
      • 2017-03-07
      • 2011-11-04
      • 2016-10-04
      • 1970-01-01
      • 2011-06-14
      相关资源
      最近更新 更多