Sdílet prostřednictvím


Podpora více procesorů

Ovladače zobrazení uživatelského režimu na počítačích s více procesory můžou umožnit modulu runtime Microsoft Direct3D zpracovávat optimalizace více procesorů nebo ovladače mohou provádět vlastní optimalizace s více procesory.

OptimalizaceRuntime-Handled Multiple-Processor

Optimalizace více procesorů, které zpracovává modul runtime Direct3D, jsou povoleny pouze u ovladačů, které podporují funkce LockAsync, UnlockAsync a Rename . Tyto funkce umožňují optimalizacím pro vícejádrové procesory efektivně spolupracovat s aplikacemi, které často dynamicky uzamykají zdroje. Funkce LockAsync a UnlockAsync spolu s funkcí GetQueryData musí být reentrantní u ovladačů, které podporují verzi DDI 0x0000000B nebo vyšší. Ovladač vrátí hodnotu verze DDI ve členu DriverVersion struktury D3D10DDIARG_OPENADAPTER ve volání OpenAdapter funkce ovladače. Když modul runtime volá funkci ovladače znovuvstupně, může jedno vlákno běžet uvnitř této funkce, zatímco jiné vlákno, které odkazuje na stejné zobrazovací zařízení, běží uvnitř jiné funkce ovladače.

Modul runtime Direct3D používá optimalizace více procesorů v některých situacích, aby se práce přesměrovala na samostatný procesor a zlepšila výkon počítače. Pokud jsou povoleny optimalizace více procesorů, přidá se mezi modul runtime Direct3D a ovladačem zobrazení v uživatelském režimu další softwarová vrstva. Tato softwarová vrstva zachycuje všechna volání, která by jinak runtime Direct3D směřoval na funkce ovladače zobrazování v uživatelském režimu.

Místo přímého volání ovladače zobrazení v uživatelském režimu zařadí tato softwarová vrstva příkazy do dávek, které zpracovává pracovní vlákno asynchronně. Softwarová vrstva však nemůže dávkovat všechna volání na funkce ovladače zobrazení v uživatelském režimu. Konkrétně softwarová vrstva nemůže dávkovat volání funkcí, které vracejí informace (například CreateResource). Když softwarová vrstva musí volat jeden z těchto typů funkcí ovladačů, vyprázdní všechny příkazy ve frontě prostřednictvím pracovního vlákna a potom softwarová vrstva volá funkci ovladače v hlavním vlákně aplikace.

OptimalizaceDriver-Handled Multiple-Processor

Pokud ovladač provede vlastní optimalizaci více procesorů, nesmí implementovat funkce LockAsync, UnlockAsync a Rename . V takovém případě musí ovladač volat funkci pfnSetAsyncCallbacksCb , aby informoval modul runtime, zda modul runtime spustí nebo zastaví přijímání volání funkcí zpětného volání modulu runtime z pracovního vlákna.

Pokud ovladač provádí vlastní optimalizace více procesorů, měl by postupovat podle stejných zásad, které modul runtime Direct3D používá, když určí povolení optimalizace více procesorů. Tato zásada umožňuje spravedlivé sdílení systémových prostředků napříč všemi procesy. Ovladač by měl zejména zakázat optimalizace více procesorů v následujících situacích:

  • Aplikace běží v režimu okna.

  • Počítač obsahuje pouze jeden procesor (nebo jádro procesoru); ovladač by měl zakázat optimalizace na počítačích s jedním procesorem s hyper-threadingem.

  • Aplikace požadovala, aby nebyly povoleny žádné víceprocesorové optimalizace, nebo aplikace používá softwarové zpracování vrcholů; tyto informace se předají funkci CreateDevice ovladače.

Pokud dodavatelé chtějí v některé z těchto situací povolit optimalizaci více procesorů, měli by se nejprve obrátit na Microsoft.