简单记录什么是UMD/KMD:UMD就是动态链接库;KMD就是.ko内核驱动模块
目录
2.1 UMD:User Mode Driver(用户态驱动)
2.2 KMD:Kernel Mode Driver(内核态驱动)
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、寄存器操作等)
-
更多推荐


所有评论(0)