在Linux系统中,GPU驱动是集成在DRM框架中的,AMD GPU的内核驱动结构是一个复杂的软件堆栈,负责管理和控制AMD图形硬件,以便应用程序可以与GPU进行通信并利用其图形处理能力。以下是AMD GPU内核驱动的主要组成部分:
硬件抽象层(HAL):
- HAL是位于底层的部分,负责与GPU硬件之间的通信。它提供了一个抽象的接口,使上层的驱动和应用程序可以访问GPU的功能和寄存器,而不需要了解具体的硬件细节。
图形命令处理器(GCP):
- GCP负责接收、解析和执行应用程序发送的图形命令。它将应用程序的图形请求翻译成GPU硬件可以理解的指令,以执行绘图操作和渲染任务。
AMDGPU内核驱动:
- 这是AMD GPU驱动的核心部分,运行在操作系统的内核空间。它与硬件通信,管理GPU资源(如显存和显卡寄存器),执行调度和任务分配,以确保多个任务在GPU上正确运行。
GPU用户空间驱动:
- GPU用户空间驱动是运行在操作系统的用户空间的组件,它与AMDGPU内核驱动协同工作,提供对GPU的高级控制。它包括OpenGL和Vulkan驱动程序,以及OpenCL运行时库,允许应用程序与GPU进行图形和通用计算任务的交互。
AMDGPU-PRO:
- AMDGPU-PRO是AMD的专业级GPU驱动,主要用于支持专业应用程序和工作负载,如CAD、3D建模和科学计算。它提供了更丰富的特性和支持,包括对专业图形API和库的更好的兼容性。
AMD ROCm:
- AMD ROCm(Radeon Open Compute)是一个开源的GPU计算平台,旨在支持GPU加速的深度学习和高性能计算工作负载。它包括ROCm内核驱动和ROCm用户空间工具,为GPU计算提供了强大的支持。
总之,AMD GPU的内核驱动结构是一个多层次的系统,由硬件抽象层、内核驱动、用户空间驱动和专业级组件组成,以便应用程序可以有效地利用AMD GPU的图形和计算能力。这些组件共同协作,确保GPU能够执行各种图形和计算任务。
作为对比,虽然不清楚它的官方驱动是如何实现的,但是NVIDIA NOUVEAU开源驱动也是集成于DRM框架中,模块之间的依赖比AMD更加简洁一些,不过这可能意味着驱动的实现更加复杂。
单纯从核显的角度作对照,可能拿INTEL的核显作为对比最为合适,毕竟两者面对的是同一个市场,INTEL的核显I915驱动拓扑如下:
在看一个,下图是VIRTUALBOX中基于虚拟GPU的DRM框架,vmwgfx.ko是虚拟GPU的KMD.对比三张拓扑,可以看到DRM和GPU之间的关系大同小异,都是KMD将自身注册进入DRM驱动框架内部,UMD通过DRM框架调用KMD的实现(模块关联图架构上是从底层到上层的,如果从调用层次上看,应该把图上下颠倒)