GPU 上下文
GPUContext 是 WebGPU 资源和设备管理的核心接口。
概述
GPUContext 封装了:
- WebGPU 设备初始化和配置
- 命令队列管理
- 缓冲区和管线资源生命周期
- 错误处理和恢复机制
创建实例
typescript
import { GPUContext } from 'tiny-dl-inference';
const context = new GPUContext();1
2
3
2
3
初始化
init()
异步初始化 WebGPU 设备和适配器:
typescript
await context.init();1
初始化后,上下文对象提供对 GPUDevice 和 GPUQueue 的访问。
资源管理
createBuffer()
创建 GPU 缓冲区:
typescript
const buffer = context.createBuffer({
size: 1024,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
mappedAtCreation: false
});1
2
3
4
5
2
3
4
5
destroy()
销毁上下文及其所有资源:
typescript
context.destroy();1
这将释放:
- WebGPU 设备连接
- 所有未销毁的缓冲区
- 管线和绑定组资源
命令提交
getQueue()
获取命令队列用于提交计算命令:
typescript
const queue = context.getQueue();
queue.submit([encoder.finish()]);1
2
2
错误处理
初始化失败时抛出适当的错误类型:
WebGPUNotSupportedError- 浏览器不支持 WebGPUDeviceInitializationError- 设备初始化失败
typescript
try {
await context.init();
} catch (error) {
if (error instanceof WebGPUNotSupportedError) {
console.error('WebGPU 不受支持');
}
}1
2
3
4
5
6
7
2
3
4
5
6
7
最佳实践
- 单例模式:每个应用创建一个 GPUContext 实例
- 尽早初始化:在应用启动时初始化
- 妥善清理:应用退出时调用 destroy()
- 错误处理:捕获并适当处理初始化错误