风起提示:由于技术的发展风起云涌,需留意文章时效,2024-09-04。
回顾
前面文章里的案例主要运行在CPU上,今天我们正式步入GPU。为什么要在介绍GPU之前介绍WASM呢?原因是前端大多数任务是CPU和GPU同时参与,我们平时开发为什么感觉不到GPU的存在呢?原因是我们平常使用的是浏览器提供的驻留模式API,底层图形API一般只提供立即模式,图形引擎会在此基础上进一步封装,提供出驻留模式API或立即模式API,这里把浏览器可以看成是一款图形引擎,驻留模式下浏览器已经封装了大量的绘图及更新机制,开发很难直接控制到底层优化。
如果要设计一款类似Figma的编辑器,追求高性能的话,我们肯定选立即模式,这样我们有更多的控制权,对节点树地操作离不开WASM,图形的渲染离不开WebGPU。
了解WebGPU时,首先遇到的两个概念:适配器和逻辑设备。这就牵扯到从物理GPU到WebGPU抽象的通用模型,看文章顶部的图片。
适配器
物理GPU通过驱动将GPU的功能暴露给操作系统,操作系统通过图形API(如Vulkan或Metal)将GPU的功能暴露给上层应用。
适配器是从操作系统提供的图形API到WebGPU的抽象,抽象出多个逻辑设备,让每个WEB应用感觉像是拥有对GPU的唯一控制权。
逻辑设备
逻辑设备是一种抽象,从适配器抽象而来:adapter.request_device()。单个 web 应用通过逻辑设备可以以分区的方式访问 GPU 功能。
逻辑设备主要提供复用的功能,因为一个物理设备的 GPU 可能同时被多个应用程序和进程使用,为了安全,每个 web 应用程序都需要能够隔离地访问 WebGPU。