多 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 idTile 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,出錯返回負錯誤碼。