MUSA Driver API 指南
MUSA Driver API 提供底层编程接口,用于显式上下文管理、模块加载、高级设备控制。
- 设计特点:显式控制(需要显式初始化和创建上下文)、灵活性高(可以精细控制设备资源)
- 适用场景:多 GPU 应用、多进程应用、库开发、需要精细控制的高级应用
概述
Runtime API vs Driver API 对比
| 特性 | Runtime API | Driver API |
|---|---|---|
| 初始化 | 隐式(首次调用自动初始化) | 显式(muInit()) |
| 上下文管理 | 自动(primary context) | 手动创建和销毁 |
| 代码复杂度 | 低 | 高 |
| 灵活性 | 低 | 高 |
| 适用场景 | 应用程序、快速原型 | 多 GPU、多进程、库开发 |
对比 Runtime API:详见 Runtime API 指南
初始化和上下文管理
显式初始化
#include <mu.h>
// 显式初始化(可选,首次调用 API 时也会自动初始化)
muInit(0);
// 获取设备
MUdevice device;
muDeviceGet(&device, 0);
// 创建上下文
MUcontext context;
muCtxCreate(&context, 0, device);
// 设置当前上下文
muCtxSetCurrent(context);
// 使用完毕后销毁上下文
muCtxDestroy(context);
上下文管理
// 获取当前上下文
MUcontext currentCtx;
muCtxGetCurrent(¤tCtx);
// 获取上下文的设备
MUdevice device;
muCtxGetDevice(&device, context);
// 获取上下文标志
unsigned int flags;
muCtxGetFlags(&flags, context);
// 切换上下文
muCtxSetCurrent(context1);
// ... 使用 context1 ...
muCtxSetCurrent(context2);
// ... 使用 context2 ...
主上下文
// 获取设备的 primary context(Runtime API 使用)
MUcontext primaryCtx;
muDevicePrimaryCtxGetState(device, &primaryCtx, NULL);
// 释放 primary context(通常不需要手动调用)
muDevicePrimaryCtxRelease(device);