Compartir a través de


Compatibilidad con varios procesadores

Los controladores de visualización en modo de usuario en equipos con varios procesadores pueden permitir que el entorno de ejecución de Microsoft Direct3D controle las optimizaciones de varios procesadores, o bien los controladores pueden realizar sus propias optimizaciones de varios procesadores.

Optimizaciones de Multiple-Processor administradas en tiempo de ejecución

Las optimizaciones de varios procesadores que administra el tiempo de ejecución de Direct3D solo están habilitadas en los controladores que admiten las funciones LockAsync, UnlockAsync y Rename . Estas funciones permiten que las optimizaciones de varios procesadores funcionen bien con aplicaciones que bloquean con frecuencia los recursos dinámicos. Las funciones LockAsync y UnlockAsync , junto con la función GetQueryData , deben reentrantizarse en los controladores que exponen una versión DDI de 0x0000000B o superior. El controlador devuelve el valor DDI-version en el miembro DriverVersion de la estructura D3D10DDIARG_OPENADAPTER en una llamada a la función OpenAdapter del controlador. Cuando el tiempo de ejecución llama a una función de controlador de manera reentrante, un subproceso se puede ejecutar dentro de esa función mientras que otro subproceso que hace referencia al mismo dispositivo de visualización se ejecuta dentro de otra función de controlador.

El tiempo de ejecución de Direct3D usa optimizaciones de varios procesadores en algunas situaciones para descargar el trabajo en un procesador independiente y mejorar el rendimiento del equipo. Cuando se habilitan las optimizaciones de varios procesadores, se agrega una capa de software adicional entre el entorno de ejecución de Direct3D y el controlador de pantalla en modo de usuario. Esta capa de software intercepta todas las llamadas que el entorno de ejecución de Direct3D realizaría en caso contrario a las funciones del controlador de visualización en modo de usuario.

En lugar de llamar directamente al controlador de visualización en modo de usuario, la capa de software pone en cola los comandos en lotes que procesa un subproceso de trabajo de forma asincrónica. Sin embargo, la capa de software no puede procesar por lotes todas las llamadas realizadas a las funciones del controlador de visualización en modo de usuario. En concreto, la capa de software no puede realizar llamadas por lotes a funciones que devuelven información (por ejemplo, CreateResource). Cuando la capa de software debe llamar a uno de estos tipos de funciones de controlador, vacía todos los comandos en cola a través del subproceso de trabajo y, a continuación, la capa de software llama a la función de controlador en el subproceso de aplicación principal.

Optimizaciones de Multiple-Processor controlador

Si un controlador realizará sus propias optimizaciones de varios procesadores, no debe implementar las funciones LockAsync, UnlockAsync y Rename . En esta situación, el controlador debe llamar a la función pfnSetAsyncCallbacksCb para notificar al tiempo de ejecución si el tiempo de ejecución se iniciará o dejará de recibir llamadas a las funciones de devolución de llamada del tiempo de ejecución desde un subproceso de trabajo.

Si el controlador realiza sus propias optimizaciones de varios procesadores, debe seguir la misma directiva que usa el entorno de ejecución de Direct3D cuando determina habilitar las optimizaciones de varios procesadores. Esta directiva permite compartir de forma equitativa los recursos del sistema en todos los procesos. En concreto, el controlador debe deshabilitar las optimizaciones de varios procesadores en las situaciones siguientes:

  • La aplicación se ejecuta en modo de ventana.

  • El equipo solo contiene un procesador (o núcleo del procesador); El controlador debe deshabilitar las optimizaciones en equipos de un solo procesador con hyper-threading.

  • La aplicación solicitó que no se habilite ninguna optimización de varios procesadores o que la aplicación use el procesamiento de vértices de software; esta información se pasa a la función CreateDevice del controlador.

Si los proveedores quieren habilitar las optimizaciones de varios procesadores en una de estas situaciones, primero deben ponerse en contacto con Microsoft.