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

时间:2017-03-21 02:51:42

标签: javascript matrix vector vectorization simd

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

的WebGL

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

WebCL

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

WebGPU

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

SIMD

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

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

备注:

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

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

2 个答案:

答案 0 :(得分:3)

SIMD.js是JavaScript的一部分。在Firefox和Chrome中也有实验性的实现,但是现在SIMD.js已经从TC39的主动开发中取消并从第3阶段中删除。网络浏览器不再需要实现它了。暴露于Web的SIMD操作正在WebAssembly内进行积极开发,其操作基于SIMD.js操作。

WebAssembly SIMD状态

答案 1 :(得分:1)

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

实践

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

发育

假设,人们可以将WebGL包装起来,使其成为通用的GPU计算机,有人试图使用gpgpu.js。但是,它有很好的支持,可能比直接将内核管道连接到GPU更慢。

结论

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