MCDM 架構
Microsoft計算驅動程式模型 (MCDM) 驅動程式是一種架構,其設計目的是在 Windows 平臺上支援高效能運算工作。 它提供標準化介面,用於開發驅動程式,這些驅動程式可以使用 GPU、NPU 和其他計算資源來執行平行處理工作。 MCDM 驅動程式對於需要大量計算能力的應用程式而言非常重要,例如科學模擬、數據分析和機器學習。
本文說明 MCDM 架構概念。 MCDM 驅動程式或僅限計算驅動程式同時具有內核模式驅動程式(.sys 驅動程式)和使用者模式動態連結庫 (DLL)。
另請參閱:
命令佇列
命令佇列是用於提交工作的 DirectCompute 建構。 驅動程式負責建立一或多個 內容 ,然後用來執行提交的工作。 驅動程式負責將透過呼叫其 DDI 表示的工作轉換成 DMA 緩衝區 ,然後提交至 Context 以供執行。
上下文
Context 是由以實例特定狀態引擎為目標的驅動程式所提交的計算工作佇列。 計算工作會以 DMA 緩衝區表示,這些緩衝區會保留在等候提交至引擎的 SW 佇列中。
SW 佇列
提交執行至內容的 DMA 緩衝區會保留在 SW 佇列中。 SW 佇列的長度只能由資源系結。 內容與其對應的 SW 佇列之間有一對一的關聯。 排程器有責任從 SW 佇列中移除 DMA 緩衝區,並將緩衝區提交至適當的引擎,而該引擎會輪流將緩衝區放在自己的 HW 佇列上。
排程器
排 程器 是由 OS 實作,而且驅動程式無法控制此排程。
排程器負責在以引擎為目標的 SW 佇列中排程加入佇列的工作。 它可確保在所有 SW 佇列中公平使用有限的引擎資源,並視需要先佔工作,以確保此公平性,並確保優先順序較高的工作能及時完成。
當排程器優先運作時,它會負責視需要先佔的工作重新加入佇列。
引擎
引擎會執行必要的動作,以完成以 DMA 緩衝區序列表示的工作。 每個 DMA 緩衝區 都會在指定的 內容 和 位址空間中執行。 引擎必須指出 DMA 緩衝區執行完成的時間,而且這些指示必須以接收 DMA 緩衝區的相同順序來指定。
引擎應該能夠在沒有以 DMA 緩衝區表示的明確或隱含相依性的情況下獨立地向前推進。 如果存在兩個以上的引擎,則會排程每個引擎的工作會及時進行,而不會損害其他引擎中執行的工作。
由於 DMA 緩衝區是以指定的位址空間執行,因此只有在每個引擎能夠在不同的位址空間中執行 DMA 緩衝區時,才能支援多個引擎。
驅動程式會決定它所報告的引擎數目,以及其建立的內容如何使用這些引擎。
HW 佇列
引擎將得到一連串的 DMA 緩衝區,這些緩衝區在概念上放在稱為 HW 佇列的佇列中。 目前,此佇列最多只會填入兩 個 DMA 緩衝區 專案。 引擎必須依提交順序完成 DMA 緩衝區。
先佔
引擎必須能夠先佔,才能中斷或取消部分完成的 DMA 緩衝區執行。
要求先佔未完成的工作時, 引擎 必須至少支援完成任何部分完成 的 DMA 緩衝區 ,並取消尚未啟動的所有 DMA 緩衝區 。
DMA 緩衝區的完成或先佔指示仍必須按照提交 DMA 緩衝區的順序來完成。 如果先占 DMA 緩衝區,則所有後續的 DMA 緩衝區(目前最多有一個其他緩衝區)也會先佔。
如果部分執行 DMA 緩衝區,驅動程式必須儲存足夠的資訊,才能繼續執行。
DMA 緩衝區
驅動程式會將透過呼叫 DDI 提交的工作轉換成 DMA 緩衝區 ,然後提交以供執行。 引擎會執行必要的動作,以完成以 DMA 緩衝區序列表示的工作。 每個 DMA 緩衝區 都會在指定的 內容 和 位址空間中執行。 引擎必須指出 DMA 緩衝區執行完成的時間,而且這些指示必須以接收 DMA 緩衝區的相同順序來指定。
位址空間
位址空間可用來將虛擬設備位址對應至實體裝置位址。 每個主機端進程都會使用單 一位址空間 。
引擎是跨進程共用的資源,因此必須支援在位址空間之間切換,因為 DMA 緩衝區是從不同的進程執行。
僅支援一個 位址空間 的裝置必須在使用方式中加以限制。 一次只允許一個進程使用裝置。 當一個進程使用裝置時,其他進程存取裝置的所有嘗試都會失敗。 僅支援單一進程存取的裝置稱為 「單一使用 」裝置。
地址空間是由位址空間根頁面數據表的單一指標所指定。 變更不同的位址空間只需要指定不同的根頁面數據表位址。
OS 會管理地址空間頁面數據表。 為了變更頁面數據表,OS 會向驅動程式提出要求,以將這些變更記錄到 DMA 緩衝區 ,這些變更稍後會在適當時間提交至適當的引擎。