Udostępnij przez


Wywłaszczanie procesora GPU

Model wywłaszczania procesora GPU został zaktualizowany w systemie Windows 8 (WDDM 1.2). W zaktualizowanym modelu system operacyjny:

  • Nie zezwala sterownikowi wyświetlania trybu jądra (KMD) na wyłączenie preempcji pakietów DMA procesora graficznego GPU.
  • Gwarantuje, że żądania wywłaszczania są wysyłane do GPU przed zainicjowaniem procesu wykrywania przekroczenia czasu i odzyskiwania (TDR).
Wymaganie Opis
Implementacja sterownika — Pełna grafika i tylko renderowanie Obowiązkowy
Wymagania i testy WHLK Device.Graphics... Test wywłaszczania, Device.Graphics... FlipOnVSyncMmIo

Jeśli system operacyjny nie może skutecznie przechwytywać długotrwałych pakietów, wówczas:

  • Praca procesora GPU o wysokim priorycie (na przykład praca wymagana przez program Desktop Window Manager (DWM) może być opóźniona. To opóźnienie powoduje usterki podczas przechodzenia okien i animacji.
  • Proces TDR może wielokrotnie resetować GPU i ostatecznie spowodować sprawdzenie błędów systemowych.

Wszystkie KMDy WDDM 1.2 muszą obsługiwać model preempcji systemu Windows 8. Jednak podczas pracy sterowniki WDDM 1.2 mogą również nie stosować się do modelu wywłaszczania systemu Windows 8 i zachować tryb systemu Windows 7, przez co wykorzystują harmonogram jądra grafiki DirectX (Dxgkrnl).

Interfejs przełączania GPU

KMD może używać następujących interfejsów DDI do implementowania modelu preemption dla GPU w systemie Windows 8.

Kroki implementacji sterownika

Wykonaj następujące ogólne kroki, aby zaimplementować model wywłaszczania GPU w systemie Windows 8 w sterowniku KMD.

  1. Skompiluj sterownik względem nagłówków, które mają DXGKDDI_INTERFACE_VERSION> = DXGKDDI_INTERFACE_VERSION_WIN8.
  2. Zadeklaruj obsługę modelu wywłaszczania procesora GPU systemu Windows 8, ustawiając elementy członkowskie PreemptionAware i MultiEngineAware struktury DXGK_VIDSCHCAPS na 1. Aby obsługiwać model wywłaszczania systemu Windows 7, ustaw wartość PreemptionAware na zero.
  3. Określ obsługiwany poziom szczegółowości wywłaszczania w strukturze D3DKMDT_PREEMPTION_CAPS, która pobiera stałe wartości z wyliczenia D3DKMDT_GRAPHICS_PREEMPTION_GRANULARITY i D3DKMDT_COMPUTE_PREEMPTION_GRANULARITY.
  4. Jeśli sprzęt obsługuje przełączanie kontekstowe z opóźnieniem, prześlij bufor o zerowej długości do funkcji DxgkDdiSubmitCommand i ustaw pSubmitCommand>Flags>ContextSwitch na 1. Zanotuj dyskusję w ramach elementu ContextSwitch struktury DXGK_SUBMITCOMMANDFLAGS .
  5. Ustaw alokacje kontekstu procesora GPU i alokacje kontekstu urządzenia, wywołując funkcję DxgkCbCreateContextAllocation . Zwróć uwagę na konkretne instrukcje i ograniczenia podane w uwagach dotyczących funkcji.
  6. Wywołaj funkcję DxgkCbDestroyContextAllocation , aby zniszczyć alokacje kontekstu procesora GPU i alokacje kontekstu urządzenia, które zostały utworzone za pomocą funkcji DxgkCbCreateContextAllocation.
  7. Podczas przygotowywania bufora DMA w odpowiedzi na wywołanie funkcji DxgkDdiBuildPagingBuffer, należy zainicjować zasób kontekstu, wypełniając strukturę wewnętrzną InitContextResource w strukturze DXGKARG_BUILDPAGINGBUFFER. Jeśli zasoby kontekstowe są eksmitowane lub przenoszone, menedżer pamięci wideo zachowa zawartość zasobów kontekstu.
  8. Sterownik musi obsługiwać zamapowaną pamięć we/wy przy wykonywaniu przerzucenia na następnej synchronizacji pionowej. W systemie Windows 8 harmonogram GPU próbuje wywłaszczać sprzęt, nawet jeśli przerzucenie oczekuje. W związku z tym, aby zapobiec rozdzieraniu i renderowaniu artefaktów, sterownik musi obsługiwać model przerzucania we/wy mapowanego pamięci i musi ustawić element członkowski FlipOnVSyncMmIo struktury DXGK_FLIPCAPS na 1 i obsługiwać operacje opisane w FlipOnVSyncMmIo.

Zagadnienia dotyczące mapowania pamięci w implementacji

Postępuj zgodnie z poniższymi zasadami, aby utworzyć niezawodny sterownik, który obsługuje model wywłaszczania GPU systemu Windows 8 i zapewnia wysokiej jakości doświadczenie użytkownika.

  • Zażądaj wywłaszczania buforu mid-DMA z procesora GPU, gdy harmonogram Dxgkrnl wysyła polecenie wywłaszczania. Urządzenia sprzętowe, które mają większą szczegółowość przerywania buforu mid-DMA, powinny zapewnić lepsze wrażenia użytkownika.
  • Zezwalaj na ponowne używanie identyfikatorów płotów poleceń stronicowania: jeśli żądanie wywłaszczania spowodowało wywłaszczanie poleceń stronicowania w kolejce sprzętowej, harmonogram Dxgkrnl ponownie wstawi wywłaszczone polecenia stronicowania z tymi samymi identyfikatorami płotu, które zostały pierwotnie użyte dla nich, a polecenia stronicowania zostaną zaplanowane przed wszystkimi innymi poleceniami w tym silniku. Polecenia inne niż przejściowe zostaną ponownie wypełnione nowo przypisanymi identyfikatorami ogrodzenia.
  • Podaj listę lokalizacji łatki dla podzielonych buforów DMA. Aby uzyskać więcej informacji, zobacz Dzielenie buforu DMA.
  • Dostępny jest tryb weryfikacji nazywany wykrywaniem przecieków powiązań. Ten tryb weryfikacji przegląda listę lokalizacji poprawek i odrzuca pakiety, które ani nie przerywają powiązania, ani nie przeprogramowują alokacji dla każdego podzielonego pakietu. Niektóre sprzęty obsługują adresy wirtualne, umożliwiając dodatkowy poziom pośredni, który może sprawić, że ta weryfikacja będzie niepotrzebna. W takim przypadku, aby wskazać, że sterownik zrezygnował z trybu weryfikacji, ustaw element członkowski NoDmaPatching struktury DXGK_VIDSCHCAPS na 1.
  • W systemie Windows 7 harmonogram Dxgkrnl gwarantuje, że wszystkie podzielone pakiety DMA odpowiadające temu samemu poleceniu renderowania są wykonywane sekwencyjnie bez przełączania do innego kontekstu renderowania. W modelu wywłaszczania systemu Windows 8 harmonogram może wykonywać pakiety renderowania z innego kontekstu między dwoma podzielonymi pakietami odpowiadającymi temu samemu poleceniu renderowania. W związku z tym sterowniki, które są świadome wywłaszczenia, powinny obsługiwać przesyłanie podzielonych/częściowych pakietów DMA w taki sam sposób, jak zwykłe pełne przesyłanie pakietów. W szczególności stan GPU musi być zapisany lub przywrócony w momencie takich zgłoszeń.
  • Sterownik uwzględniający preempcję nie może zmieniać zawartości podzielonego buforu DMA, gdy jest transmitowany do wielu kart w trybie połączonych kart wyświetlania (LDA), gdzie wiele fizycznych układów GPU jest połączonych w jeden szybszy wirtualny procesor GPU. W modelu wywłaszczania systemu Windows 8 harmonogram Dxgkrnl nie gwarantuje już synchronicznego wykonania sekwencji podzielonych pakietów bez przełączania się do innego kontekstu. Sterownik, który zmienił zawartość podzielonego pakietu DMA, naruszyłby integralność danych pakietu. W szczególności, jeśli pakiet został wykonany na innym silniku, będzie działać na tej samej kopii danych buforu DMA.
  • W modelu wywłaszczania GPU systemu Windows 8, harmonizator Dxgkrnl umożliwia wywłaszczanie pakietów, które mają skojarzony "sygnał przy przesyłaniu" prymitywy synchronizacyjne. Jeśli urządzenie używa prymitywów synchronizacji "sygnalizacja przy przesyłaniu" ze stanami oczekiwania opartymi na sprzęcie, musi obsługiwać możliwość przerwania polecenia oczekiwania przed spełnieniem warunku oczekiwania.

Wymagania dotyczące certyfikacji sprzętu

Aby uzyskać informacje na temat wymagań, które muszą spełniać urządzenia sprzętowe przy implementacji tej funkcji, zapoznaj się z odpowiednią dokumentacją zestawu WHLK w dokumentacji Device.Graphics… Test preemption i Device.Graphics… FlipOnVSyncMmIo.