浏览器JavaScript是否支持SIMD或向量化操作?

23

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

WebGL

显然可以在GPU上进行向量和矩阵计算,但我不清楚其限制。尝试包装此库的尝试 限制 看来限制矩阵和向量的大小。这是实际限制(浏览器不支持其他东西)还是开发限制(需要有人编写代码)?

WebCL

WebCL 是OpenCL的提议的浏览器级实现,但似乎停滞不前

WebGPU

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

SIMD

Mozilla发布了一个用于SIMD操作的API,但它仅具有实验性支持。

浏览器端是否支持向量化计算?


备注:

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

  • 我可能把SIMD、向量化和GPU计算搞混了。在这个语境中,我认为可以将它们视为同义词使用,因为它们都允许利用硬件加速进行高维向量的高效计算。


  • 我不擅长JavaScript。拥有一个丰富的客户端很棒,但我认为在客户端使用SIMD指令可能会引起许多问题。顺便说一下,您必须在不同的架构中检查您的Web应用程序,以查看该实验性SIMD库在JavaScript中的效率。您必须考虑到英特尔支持不同的SIMD技术128位、256位和512位指令,并在不同的操作系统、编译器、ISA等方面存在各种兼容性问题,这只是针对英特尔!如果您在服务器端使用Java,有一些方法可以在服务器端使用SIMD化,这可能会很有用。 - Amiri
    2个回答

    16

    SIMD.js是JavaScript的一部分。Firefox和Chrome也有实验性的实现,但现在SIMD.js已经从TC39的主动开发中移除,并从第三阶段中删除。它不再被Web浏览器追求进行实现。在WebAssembly中,面向Web的SIMD操作正在积极开发中,其操作基于SIMD.js操作。

    WebAssembly SIMD状态

    LLVM Wasm后端和Web引擎中SIMD的状态:
    提案:实现状态


    7

    SIMD在JavaScript中的状态部分是实践和开发问题。

    实践

    Web浏览器有点像虚拟机。这意味着它们需要大量的硬件驱动程序。为WebGL暴露少数着色器等内容的驱动程序与需要进行任意内核执行的SIMD操作的驱动程序明显不同。

    开发

    理论上,可以使用gpgpu.js将WebGL包装成通用GPU计算机,有人已经尝试过了。但它的支持性很棘手,可能比直接将内核传输到GPU要慢。

    结论

    Web还没有准备好使用SIMD。目前有许多大公司致力于使其准备就绪。在那之前,您将不得不依赖WebWorkers来处理大批量的数字计算。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接