A seguir está o que o visualizador de recursos do Vulkan mostra para meu computador:
MEMORY HEAP 0
DEVICE SIZE 8321499136
FLAGS
DEVICE_LOCAL_BIT
MULTI_INSTANCE_BIT
MEMORY TYPE 0
DEVICE_LOCAL_BIT
MEMORY TYPE 1
DEVICE_LOCAL_BIT
MEMORY HEAP 1
DEVICE SIZE 16760438784
FLAGS
NONE
MEMORY TYPE 0
HOST_VISIBLE_BIT
HOST_COHERENT_BIT
MEMORY TYPE 0
HOST_VISIBLE_BIT
HOST_COHERENT_BIT
O heap 0 é o meu dispositivo de GPU, que tem 8 GB. O heap 1 deveria ser a RAM da minha CPU. Tenho 32 GB e é isso que aparece no meu gerenciador de tarefas no Windows, mas apenas metade disso (16 GB) aparece na descrição do heap de memória Vulkan com o Vulkan. Pesquisei o motivo disso e encontrei na página "Calculando Memória Gráfica" na página da Microsoft:
Antes que o VidMm possa reportar uma conta precisa aos clientes, ele precisa primeiro calcular a quantidade total de memória gráfica. O VidMm usa os seguintes tipos de memória e fórmulas para calcular os números de memória gráfica:
Memória total do sistema
This value is the total amount of system memory accessible to the operating system. Memory that the BIOS allocates doesn't appear in this number. For example, a computer with a 1 GB DIMM (1,024 MB) that has a BIOS that reserves 1 MB of memory appears to have 1,023 MB of system memory.
Memória total do sistema disponível para uso gráfico
This value is the total amount of system memory that is dedicated or shared to the GPU. This number is calculated as follows: C++
TotalSystemMemoryAvailableForGraphics = MÁX.((TotalSystemMemory / 2), 64 MB)
O link está aqui .
Eu estava me perguntando por que isso acontece. Só metade da sua RAM está disponível para uso com Vulkan e DirectX, ou API gráfica? Aparentemente é isso que o VidMm informa. Não sei o que é o VidMm, mas o DirectX ou o Vulkan consultam isso para ver quanta memória está disponível, e sempre informam apenas metade da sua RAM?
No meu caso, tenho uma GPU dedicada com 8 GB, que é informada corretamente, e a RAM do sistema é informada como METADE do que eu realmente tenho, 32 GB dividido por 2. O que aconteceria se fosse uma iGPU? O dispositivo só conseguiria usar metade dessa memória do sistema? Ou seja, apenas metade da memória do dispositivo conseguiria ser usada? Isso só acontece no Windows e agora em outros sistemas operacionais?