AMD GPU VMID

本文所讨论的均为AMD公司的显卡产品

显卡:AMD Radeon RX 5500 - 8GB 显存

Linux:Linux-5.4.y (fc944ddc0b4a)

AMD GPU HUB

在AMD GPU内部有很多种类的IP,这些不同种类的IP硬件一起构成了完整的GPU硬件,这些子IP在运行的时候也需要访问VRAM或者sysMem的资源,但是不同的是,这些IP并没有与实际的Memroy Controler(MC) 相连,而是汇总到一个称作为“HUB”的硬件单元上,由这个硬件单元代理进行统一的寻址,这个硬件和我们在计算机上看到南桥(PCH: Platfrom Controller Hub)很类似,计算机将一些低速的设备(NIC, SATA, USB ..) 连接到南桥,再由南桥芯片统一和CPU进行通信。

由于GPU硬件设计的需要,在AMD GPU内部集成了一个或者多个HUB硬件,系统将不同种类的IP硬件连接到不同的HUB上,由HUB代理IP进行IO访问,GPU内部IP大多数设备都是基于HUB来进行内存访问的。

HUB IP Note
GFX HUB (1个) GC (Graphic Core), sDMA 主要计算单元: SE/SH/CU/SIMD
MM HUB (1个或者多个) UVD, VCE, VCN, JPEG, DCN 多媒体: 编码解码等IP
阅读更多

AMD GPU Ring Buffer

本文所讨论的均为AMD公司的显卡产品

显卡:AMD Radeon RX 5500 - 8GB 显存

Linux:Linux-5.4.y (fc944ddc0b4a)

背景

现代的驱动模型中,一般有2种方式来操作硬件:

  • PUSH:CPU通过读写寄存器的方式来控制GPU硬件。
  • PULL:CPU将命令写到一块buffer中,并通知硬件,由硬件来解析命令并执行。

2种模式各有优劣,使用PUSH的方式一般都为同步操作,需要占用CPU时间,并且在GPU领域有大量的寄存器是不方便用户直接读写的,所以GPU大多数采用的是PULL方式。因此本文主要介绍AMD KMD Ring Buffer的原理和实现。

AMD GPU Ring Buffer

AMD GPU Ring Buffer

阅读更多

AMD GPU 虚拟内存

本文所讨论的均为AMD公司的显卡产品

显卡:AMD Radeon RX 5500 - 8GB 显存

Linux:Linux-5.4.y (fc944ddc0b4a)

Arch: X86_64

AMD GPU 虚拟内存

现代的GPU内部都包含有一个类似MMU的内存管理单元,负责GPU侧的虚拟地址到物理的翻译。和CPU类似,GPU也有一个多级页表的数据结构来管理GPU页表的映射,每一个GPU进程有一份GPU页表,在提交Command的时候GPU驱动会把进程对应的GPU页表设置到硬件寄存器中,在细节上GPU的地址分配和映射和CPU稍有不同。

阅读更多

CPU视角下的GPU物理内存 (VRAM/GTT)

本文所讨论的均为AMD公司的显卡产品

显卡:AMD Radeon RX 5500 - 8GB 显存

Linux:Linux-5.4.y (fc944ddc0b4a)

GPU的分类

GPU又称之为显卡,在计算机里面扮演着图形渲染和并行计算的角色,今天我们就来聊一聊GPU的物理内存。

现代的计算机显卡按照内存的类型分为2种:

  • UMA:Unified Memory Architecture, 统一内存架构,一般认为是集成显卡
  • dGPU: Discrete GPU 独立显卡

独立显卡一般配有高带宽(HBM)的显存,主要有2种:GDDRX 和 HBM显存, HBM主要用于高端显卡。

阅读更多

编译Linux内核

环境准备

1
$ sudo apt install libelf-dev libssl-dev build-essential flex bison

下载内核源码

1
$ git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux.git

or

1
$ git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux-stable.git

在这里我们使用国内的清华tuna源加速下载内核源码

阅读更多