Partilhar via


Abertura do host da CPU

Para unidades de processamento gráfico (GPUs) discretas do sistema operacional de 32 bits, que não suportam BAR redimensionável ou quando o redimensionamento da barra de buffer de quadros falha, o Windows Display Driver Model (WDDM) v2 oferecerá um mecanismo alternativo pelo qual uma VRAM de GPU discreta pode ser acessada com eficiência. Para GPUs, que suportam um espaço de endereçamento BAR programável, uma nova funcionalidade CPU Host Aperture é introduzida no WDDM v2 para abstrair essa funcionalidade.

Ao expor uma abertura de host de CPU, o driver de modo kernel preenche uma nova estrutura de tampas de DXGK_CPUHOSTAPERTURE para cada segmento que suporta uma abertura de host de CPU. Esta definição determina o tamanho da abertura do processador anfitrião, o que permite ao driver reservar uma parte da BAR para fins internos. O tamanho da página é o mesmo que as páginas GPU do segmento de memória.

O driver do modo kernel então expõe duas novas interfaces de driver de dispositivo (DDIs) para gerenciar o espaço de endereçamento BAR, em particular DxgkDdiMapCpuHostAperture e DxgkDdiUnmapCpuHostAperture.

A memória para a tabela de páginas atrás da abertura do host da CPU é gerenciada pelo driver e configurada no início da inicialização do driver. Espera-se que DxgkDdiMapCpuHostAperture e DxgkDdiUnmapCpuHostAperture estejam operacionais imediatamente após a enumeração de segmento e sejam usados durante a inicialização do gerenciador de memória de vídeo para mapear o endereço virtual da CPU para o diretório de página e a tabela de páginas do processo de paginação do sistema durante a inicialização do adaptador.

Quando o acesso da CPU a um segmento de memória é necessário, o gerenciador de memória de vídeo reserva páginas na Abertura do Host da CPU e mapeia páginas de segmento de memória através dela. Isto é ilustrado abaixo.

Diagrama que mostra o mapeamento do segmento de abertura do host da CPU em um segmento de memória GPU.

Na configuração do adaptador de vídeo vinculado, as coisas são semelhantes, exceto o seguinte.

  • A alocação padrão ou LinkMirrored é sempre mapeada para GPU0.
  • A alocação LinkInstanced tem um intervalo de endereços virtuais de AllocationSize*NumberOfGPUInLink associada a ela, com várias partes da alocação sendo mapeadas para GPUs diferentes.

Isso é ilustrado abaixo: Diagrama que mostra o mapeamento do segmento de abertura do host da CPU para configurações de adaptador de vídeo vinculado.