(2020 年 1 月)还有其他选项可以在 GPU 上进行 Web 计算:
WebGL 计算着色器(旧但易于访问)
这很容易在 WebGL 上下文中设置。与 WebCL 相比,缺点很小:
- WebCL 浮点精度保证更好(对于大多数用途,没关系)
- WebCL 支持 WebGL Compute 不支持的随机写入,但对于大多数并行问题,这并不重要,因为您将只为当前操作的元素编写结果。
- 缓冲区数据以整数形式返回 CPU,但如果您以正确的方式表示您的值并在 GPU/CPU 上进行相应的编码/解码,则可以解决此问题。我通过在计算着色器中最终确定之前将浮点数乘以某个较大的值(如 1024)来做到这一点,并在 CPU 上获得整数后除以相同的值(请注意,使用 2 的幂意味着您可以非常快速地执行此整数除法通过做
value = buffer[n] >> 10
即1024 = 2 ^ 10)。我没有像某些科学/金融科技应用程序那样担心精度问题。
您可以在此处找到最近更新的规范。
WebGPU(新标准)
这是正在实施的最新标准,也是 WebGL 1.0、2.0 和 WebCL 的后续版本。
async
您可以直接从 JavaScript 访问 GPU 的计算能力,使用和处理 GPU 标注的延迟await
。您将需要使用WHLSL(现为 WSL)编写着色器,这是一种新的高级着色器语言,它紧密基于 Direct3D HLSL。
它抽象了最新的低级 3D 图形 API,例如 Metal、Vulkan 和 Direct3D 12,从而与 Open/WebGL 相比减少了 GPU 开销。
选择?
WebGL 计算着色器适用于那些打算在 WebGL 渲染中使用计算结果的人,他们无论如何都在他们的应用程序中进行 WebGL 渲染,或者想要在 Web 上进行原型设计然后移植到原生 OpenGL。
WebGPU用于计划的跨浏览器,包括在 Apple 设备(其中 GL 长期以来一直得不到很好的支持)、新颖性和速度。也用于图形。
WebCL通过 Chrome / Chromium 的扩展,如果您最终希望有机会在 CPU 上运行代码,无需修改,也不需要 GPU 渲染。