多片设备¶
不同的供应商对“片(tile)”的用法略有不同,但在英特尔的世界里,“片(tile)”与大多数人认为的完整 GPU 非常接近。当多个 GPU 放置在一个 PCI 设备后面时,这就是所谓的“多片设备”。在这种情况下,几乎所有硬件都是按片复制的,尽管某些职责(如 PCI 通信、向操作系统报告中断等)仅由“根片”处理。多片平台负责以某种方式将这些片连接在一起,使得来自远程片的中断通知被转发到根片,每个片的显存被组合成一个单一的地址空间等等。
相比之下,“GT”(官方称为“图形技术”)是 GPU/片中负责实现图形和/或媒体操作的子集。GT 是驱动程序实现的主要部分,因为硬件引擎、执行单元和 GuC 都驻留在此处。
历史上,大多数英特尔设备都是包含单个 GT 的单片设备。PVC 是一个基于多片设计的英特尔平台示例(即,单个 PCI 设备后面有多个 GPU);每个 PVC 片只有一个 GT。相比之下,像 MTL 这样的平台,其渲染和媒体 IP 有单独的芯片,仍然只是一个逻辑 GPU,但图形和媒体 IP 模块都作为该单个 GPU 内的单独 GT 公开。这从软件的角度来看很重要,因为像 MTL 这样的多 GT 平台只复制了 GPU 硬件的子集,其行为与像 PVC 这样的几乎所有内容都被复制的多片平台不同。
- 每片功能(由片内的所有 GT 共享)
完整的 4MB MMIO 空间(包含 SGunit/SoC 寄存器、GT 寄存器、显示寄存器等)
全局 GTT
显存 (如果为独立显卡)
中断流
迁移上下文
内核批处理缓冲池
主 GT
媒体 GT(如果媒体版本 >= 13)
- 每个 GT 的功能
GuC
硬件引擎
可编程硬件单元(子切片、EU)
GSI 寄存器子集(这些寄存器的多个副本驻留在片提供的完整 MMIO 空间内,但在不同的偏移量处 --- 渲染为 0,媒体为 0x380000)
多播寄存器引导
用于缓存页表转换的 TLB
重置能力
低级电源管理(例如,C6)
时钟频率
MOCS 和 PAT 编程
内部 API¶
-
int xe_tile_alloc(struct xe_tile *tile)¶
执行每片的内存分配
参数
struct xe_tile *tile
要为其执行分配的片
描述
使用 DRM 管理的分配来分配各种每片数据结构。不会接触硬件。
如果分配失败,则返回 -ENOMEM,否则返回 0。
-
int xe_tile_init_early(struct xe_tile *tile, struct xe_device *xe, u8 id)¶
初始化片和主 GT
参数
struct xe_tile *tile
要初始化的片
struct xe_device *xe
父 Xe 设备
u8 id
片 ID
描述
初始化不需要与硬件进行任何交互或了解图形/媒体 IP 版本的每片资源。
返回
成功时返回 0,错误时返回负错误代码。
-
int xe_tile_init_noalloc(struct xe_tile *tile)¶
初始化片,直到可以进行分配为止。
参数
struct xe_tile *tile
要初始化的片。
描述
此函数准备该片以允许向显存分配内存,但不允许自身分配内存。此状态对于显示读取很有用,因为继承的显示帧缓冲器通常会覆盖显存的开头。
请注意,由于这是片初始化,因此它不应执行任何 GT 特定操作,因此不需要保持 GT 强制唤醒。
返回
成功时返回 0,错误时返回负错误代码。