目录
1 引言
2 什么是UMD、KMD
2.1 UMD:User Mode Driver(用户态驱动)
2.2 KMD:Kernel Mode Driver(内核态驱动)
3 个人理解
UMD(用户态驱动)是 动态链接库
KMD(内核态驱动)是 内核模块
1 引言
新入职一家公司,看群里之前的聊天记录发现了了两个名词,问了下chatgpt是什么意思,然后简单记录下。
2 什么是UMD、KMD
2.1 UMD:User Mode Driver(用户态驱动)
作用:
它是运行在用户空间的驱动程序。
主要负责接收应用层(如 OpenGL、Vulkan、OpenCL、HIP 等 API)发出的调用请求,并将这些请求转换为硬件指令。
它不直接控制硬件,而是将任务“包装好”交给 KMD 处理。
典型组成(不同厂商略有差异):
AMD 的 UMD 可能包括:
libamdocl64.so(OpenCL)
libhip_hcc.so(HIP)
libamd_comgr.so(Code object manager)
librocblas.so, libMIOpen.so(用于深度学习等)
Video 编解码相关的共享库(如 VCN UMD)
2.2 KMD:Kernel Mode Driver(内核态驱动)
作用:
运行在操作系统内核空间,直接与硬件打交道。
它接收来自 UMD 的指令并实际调度 GPU 工作,比如内存分配、上下文切换、DMA 数据传输、提交计算任务、调度线程、处理中断等。
是操作系统内核中的一部分,通常以内核模块(Linux 下是 .ko 文件)形式存在。
在 AMD ROCm 中的典型组件:
amdgpu.ko:基础的 GPU 驱动内核模块
kfd(Kernel Fusion Driver):ROCm 的计算调度内核驱动
3 个人理解
UMD(用户态驱动)是 动态链接库
本质就是 .so(Linux)或 .dll(Windows) 文件。
例如:
OpenCL 程序会链接 libamdocl64.so
HIP 程序会链接 libhiprtc.so / libhip_hcc.so
视频编解码程序可能链接 libamf.so
它们向上暴露 API 接口,供用户调用;
向下将调用通过系统调用(如 ioctl)发给内核态驱动。
KMD(内核态驱动)是 内核模块
是 .ko 文件(Linux)或 .sys(Windows)。
比如 AMD 的 amdgpu.ko、kfd.ko
它们接收 UMD 的系统调用,然后:
分配内存、映射显存
管理上下文、调度任务
和硬件通信(PCIe、DMA、寄存器操作等)