目录

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、寄存器操作等)

更多推荐