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