浏览器JavaScript是否允许SIMD或矢量化操作?

Sea*_*123 9 javascript vector simd matrix vectorization

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

WebGL的

显然允许GPU上的矢量和矩阵计算,但我不清楚其局限性.围绕此库尝试的 包装器似乎限制了矩阵和向量的大小.这是一个实际的限制(浏览器不支持其他任何东西)或只是开发限制(有人需要编写代码)?

WebCL

WebCL是OpenCL的一个提议的浏览器级实现,但似乎停留在开发中.

WebGPU

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

SIMD

Mozilla已经推出了一个用于SIMD操作的API,但它只有实验支持.

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


笔记:

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

  • 我可能会对SIMD,矢量化和GPU计算感到困惑.我认为在这种情况下同义地使用它们是可以的,因为它们都允许通过使用专门的计算机硬件进行涉及高维向量的有效计算.

Sea*_*123 7

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

实际的

Web 浏览器有点像虚拟机。这意味着他们需要大量的硬件驱动程序。用于公开 WebGL 的少数着色器等的驱动程序与 SIMD 操作所需的任意内核执行有显着不同。

发育性

假设,人们可以通过包装 WebGL 使其成为通用 GPU 计算机,并且有人尝试使用gpgpu.js来实现。然而,它的支持很挑剔,并且可能比直接将内核通过管道传输到 GPU 慢。

结论

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


Nid*_*kan 5

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

WebAssembly SIMD状态

  • Chrome:开发中
  • Firefox:没有公开信号
  • 优势:发展中
  • Safari:没有公开信号

LLVM Wasm后端和Web引擎中SIMD的状态:
建议:实施状态