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