簡介

Linux 計算加速器子系統旨在以通用方式向用戶空間公開計算加速器並提供一套通用的功能。

這些裝置可以是獨立的 ASIC,也可以是 SoC/GPU 內部的 IP 塊。儘管這些裝置通常旨在加速機器學習 (ML) 和/或深度學習 (DL) 計算,但加速層不限於處理這些型別的加速器。

通常,計算加速器將屬於以下類別之一:

  • 邊緣 AI - 在邊緣裝置上進行推理。它可以是嵌入式 ASIC/FPGA,也可以是 SoC 內部的 IP(例如筆記型電腦網路攝像頭)。這些裝置通常使用暫存器進行配置,可以帶或不帶 DMA 工作。

  • 推理資料中心 - 大型伺服器中的單使用者/多使用者裝置。此型別的裝置可以是獨立的,也可以是 SoC 或 GPU 內部的 IP。它將具有板載 DRAM(用於儲存 DL 拓撲)、DMA 引擎和命令提交佇列(核心或使用者空間佇列)。它還可能具有 MMU 以管理多個使用者,並且可能還支援虛擬化 (SR-IOV) 以在同一裝置上支援多個 VM。此外,這些裝置通常會配備一些工具,例如分析器和偵錯程式。

  • 訓練資料中心 - 類似於推理資料中心卡,但通常具有更高的計算能力和記憶體頻寬(例如 HBM),並且可能會有擴充套件/橫向擴充套件的方法,即分別連線到伺服器內部或其他伺服器中的其他訓練卡。

所有這些裝置通常都有不同的執行時使用者空間軟體棧,這些軟體棧是為其硬體量身定製的。此外,它們可能還會包含一個編譯器,用於為其定製的計算引擎生成程式。通常,使用者空間中的通用層將是 DL 框架,例如 PyTorch 和 TensorFlow。

與 DRM 共享程式碼

由於此類裝置可以是 GPU 內部的 IP 或具有與 GPU 相似的特性,因此加速子系統將使用 DRM 子系統的程式碼和功能。即,加速核心程式碼將成為 DRM 子系統的一部分,並且加速裝置將是一種新型的 DRM 裝置。

這將使我們能夠利用廣泛的 DRM 程式碼庫,並與具有此類裝置經驗的 DRM 開發人員協作。此外,為加速器驅動程式新增的新功能也可以供 GPU 驅動程式使用。

與 GPU 的區別

因為我們希望防止廣泛的使用者空間圖形軟體棧嘗試將加速器用作 GPU,所以計算加速器將透過使用新的主裝置號和新的裝置字元檔案與 GPU 區分開來。

此外,驅動程式將位於核心樹中的一個單獨位置 - drivers/accel/。

加速器裝置將以專用的 261 主裝置號暴露給使用者空間,並遵循以下約定:

  • 裝置字元檔案 - /dev/accel/accel*

  • sysfs - /sys/class/accel/accel*/

  • debugfs - /sys/kernel/debug/accel/*/

入門

首先,閱讀 DRM 文件 GPU 驅動程式開發者指南。它不僅會解釋如何編寫新的 DRM 驅動程式,還會包含所有關於如何貢獻、行為準則以及編碼風格/文件的資訊。所有這些都與加速子系統相同。

其次,確保核心已配置 CONFIG_DRM_ACCEL。

要將您的裝置公開為加速器,您的驅動程式需要進行兩項更改(與標準 DRM 驅動程式不同):

  • 在您的 drm_driver 的 driver_features 欄位中新增 DRIVER_COMPUTE_ACCEL 功能標誌。重要的是要注意,此驅動程式功能與 DRIVER_RENDER 和 DRIVER_MODESET 互斥。希望同時公開圖形和計算裝置字元檔案的裝置應由兩個使用輔助匯流排框架連線的驅動程式處理。

  • 更改驅動程式 fops 結構中的 open 回撥為 accel_open()。或者,您的驅動程式可以使用 DEFINE_DRM_ACCEL_FOPS 宏輕鬆設定正確的函式操作指標結構。

外部參考

郵件執行緒

會議演講