DirectX 12 D3D12 obtiene una nueva función que otorga más control sobre la asignación de memoria a GPU o CPU de forma dinámica

Hardware / DirectX 12 D3D12 obtiene una nueva función que otorga más control sobre la asignación de memoria a GPU o CPU de forma dinámica 3 minutos de lectura

DirectX 12



En la próxima gran actualización del sistema operativo Windows 10, DirectX12, y más específicamente, Direct3D (D3D12), será obteniendo no una sino nuevas banderas que alterará la forma en que se asignan los recursos de memoria. Parece que a Microsoft le preocupa con razón la forma en que las aplicaciones solicitan y asignan memoria y potencia de procesamiento, lo que a menudo puede crear un cuello de botella. Por cierto, estos nuevos indicadores no afectarán directamente a la memoria, sino que afectarán la forma en que se asigna y administra.

Microsoft ha estado desarrollando activamente la última versión de la plataforma DirectX, que durante mucho tiempo ha sido un estándar líder para juegos de escritorio. La última versión de Microsoft DirectX 12 ha recibido varias funciones nuevas últimamente. Recientemente cubrimos el características nuevas más destacadas e importantes de DirectX 12 lo que beneficiaría significativamente a los desarrolladores y usuarios finales. Esta semana, Microsoft indicó que la próxima actualización importante de Windows 10 debería incluir dos nuevos indicadores para DirectX12 Direct3D. Curiosamente, los desarrolladores que deseen explorar lo mismo hoy, simplemente deben descargar e instalar la última compilación de Windows 10 Insider Preview y SDK Preview Build para Windows 10 (20H1) desde el programa Windows Insider.



Windows 10 DirectX 12 Direct3D para obtener dos nuevos indicadores para la asignación de memoria dinámica entre CPU y GPU:

En la próxima actualización de Windows 10, D3D12 agregará dos nuevos indicadores a la enumeración D3D12_HEAP_FLAG. Por cierto, estos nuevos indicadores son propiedades 'impermanentes'. En pocas palabras, esto significa que los nuevos indicadores no afectarán directamente a la memoria resultante en sí. En cambio, los nuevos indicadores afectarán la forma en que se asigna la memoria. Además, estas banderas no se reflejan en ID3D12Heap :: GetDesc o ID3D12Resource :: GetHeapProperties .



D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

En su iteración actual, cada vez que un desarrollador solicita a D3D que asigne un montón o un recurso comprometido, lo último que sucede antes de que recupere el objeto es que la memoria se vuelve residente. Esto es notablemente similar a ID3D12Device :: MakeResident siendo realizado. No hace falta agregar que dicho proceso presenta dos problemas de inmediato:



  1. El diseño bloquea un subproceso de CPU hasta que la memoria está completamente lista para usar. Esta no es una situación ideal o deseada
  2. El proceso también permitirá a los desarrolladores comprometer demasiado la memoria, más allá de lo que el presupuesto del proceso actual indica que debería usar.

El recién agregado ID3D12Device3 :: EnqueueMakeResident permite que las aplicaciones tomen diferentes decisiones. Las aplicaciones podrían esperar la residencia usando la GPU en lugar de la CPU o solicitar que la operación de residencia falle en lugar de exceder el presupuesto. La asignación de memoria en un estado no residente da como resultado la impartición de ambos beneficios al primer uso de recursos.

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

Esta bandera intenta abordar los contenidos puestos a cero que comprometieron recursos y montones recién creados por D3D recibidos. Microsoft intentó optimizar este proceso habilitando más memoria de reutilización que nunca había salido de los confines de un proceso dado sin poner a cero. Sin embargo, esto no funcionó bien y obligó a los ingenieros de Microsoft a volver a devolver solo memoria cero. No hace falta mencionar que esta forma fue bastante tediosa ya que el administrador de memoria necesita escribir explícitamente ceros en la memoria antes de devolverla a los desarrolladores para su reutilización.

Como una forma de optimizar el proceso, los desarrolladores tienen la capacidad de optar por no participar en el tedioso proceso simplemente especificando la nueva bandera durante la asignación de recursos / montón. Esencialmente, la reasignación dinámica podría minimizar el proceso de puesta a cero obligatorio de todos los tiempos y asignar algo de memoria liberada que los procesos del desarrollador estaban usando sin forzarla a través del proceso de puesta a cero.



Microsoft ya ha agregado estos nuevos indicadores y no requieren nuevos controladores. Además, no hay ningún CheckFeatureSupport opción para estos. Básicamente, estos nuevos indicadores están disponibles en cualquier momento en que se expone ID3D12Device8, o una verificación de D3D12_FEATURE_D3D12_OPTIONS7 tiene éxito. Todo lo que exigen las nuevas banderas es que los desarrolladores deben ejecutar procesos en una versión de D3D12 que los comprenda.

Etiquetas Directo X12 directx Microsoft Ventanas