Freigeben über


Unterstützung mehrerer Prozessoren

Benutzermodusanzeigetreiber auf Computern mit mehreren Prozessoren können es der Microsoft Direct3D-Runtime ermöglichen, Optimierungen mit mehreren Prozessoren zu verarbeiten, oder die Treiber können ihre eigenen Optimierungen mit mehreren Prozessoren durchführen.

Laufzeithandhabte Multiple-Processor-Optimierungen

Die Optimierungen mit mehreren Prozessoren, die von der Direct3D-Runtime verarbeitet werden, werden nur für Treiber aktiviert, die die Funktionen LockAsync, UnlockAsync und Rename unterstützen. Diese Funktionen ermöglichen es, dass die Optimierungen mit mehreren Prozessoren gut mit Anwendungen funktionieren, die häufig dynamische Ressourcen sperren. Die Funktionen LockAsync und UnlockAsync müssen zusammen mit der GetQueryData-Funktion für Treiber erneut bereitgestellt werden, die eine DDI-Version von 0x0000000B oder höher verfügbar machen. Der Treiber gibt den Wert DDI-version im DriverVersion-Member der D3D10DDIARG_OPENADAPTER-Struktur in einem Aufruf der OpenAdapter-Funktion des Treibers zurück. Wenn die Runtime eine Treiberfunktion erneut aufruft, kann ein Thread innerhalb dieser Funktion ausgeführt werden, während ein anderer Thread, der auf dasselbe Anzeigegerät verweist, innerhalb einer anderen Treiberfunktion ausgeführt wird.

Die Direct3D-Runtime verwendet in einigen Situationen Optimierungen mit mehreren Prozessoren, um Arbeit auf einen separaten Prozessor auszulagern und die Computerleistung zu verbessern. Wenn Optimierungen mit mehreren Prozessoren aktiviert sind, wird zwischen der Direct3D-Runtime und dem Benutzermodusanzeigetreiber eine zusätzliche Softwareebene hinzugefügt. Diese Softwareschicht fängt alle Aufrufe ab, die die Direct3D-Runtime andernfalls an die Funktionen des Treibers im Benutzermodus anzeigen würde.

Anstatt den Anzeigetreiber für den Benutzermodus direkt aufzurufen, werden befehle auf Softwareebene in Batches eingereiht, die ein Workerthread asynchron verarbeitet. Die Softwareschicht kann jedoch nicht alle Aufrufe, die an die Funktionen des Benutzermodusanzeigetreibers getätigt werden, batchieren. Insbesondere kann die Softwareschicht keine Batchaufrufe von Funktionen ausführen, die Informationen zurückgeben (z. B. CreateResource). Wenn die Softwareschicht eine dieser Typen von Treiberfunktionen aufrufen muss, werden alle Befehle in der Warteschlange über den Workerthread geleert, und dann ruft die Softwareschicht die Treiberfunktion im Standard Anwendungsthreads auf.

Treiberhandhabte Multiple-Processor-Optimierungen

Wenn ein Treiber eigene Optimierungen mit mehreren Prozessoren durchführt, darf er die Funktionen LockAsync, UnlockAsync und Rename nicht implementieren. In dieser Situation muss der Treiber die Funktion pfnSetAsyncCallbacksCb aufrufen, um die Runtime zu benachrichtigen, ob die Runtime Aufrufe der Rückruffunktionen der Runtime von einem Workerthread startet oder nicht mehr empfängt.

Wenn der Treiber seine eigenen Optimierungen mit mehreren Prozessoren ausführt, sollte er dieselbe Richtlinie befolgen, die die Direct3D-Runtime verwendet, wenn sie bestimmt, optimierungen mit mehreren Prozessoren zu aktivieren. Diese Richtlinie ermöglicht eine faire Gemeinsame Nutzung von Systemressourcen über alle Prozesse hinweg. Insbesondere sollte der Treiber Optimierungen mit mehreren Prozessoren in den folgenden Situationen deaktivieren:

  • Die Anwendung wird im Fenstermodus ausgeführt.

  • Der Computer enthält nur einen Prozessor (oder Prozessorkern); Der Treiber sollte Optimierungen auf Einzelprozessorcomputern mit Hyperthreading deaktivieren.

  • Die Anwendung hat angefordert, dass keine Optimierungen mit mehreren Prozessoren aktiviert werden, oder die Anwendung verwendet Software-Vertex-Verarbeitung; Diese Informationen werden an die CreateDevice-Funktion des Treibers übergeben.

Wenn Anbieter in einer dieser Situationen Optimierungen mit mehreren Prozessoren aktivieren möchten, sollten sie sich zuerst an Microsoft wenden.