Vulkan vkEnumeratePhysicalDevices retornando contagem inesperada de dispositivos

8

Na máquina em que estou executando, tenho duas GTX 980 Tis. Quando eu pergunto, a contagem de dispositivos físicos vkEnumeratePhysicalDevicessempre retorna 1, apesar de ter duas placas gráficas físicas discretas. Quando uso vulkaninfoo único dispositivo listado é o GPU0que é DISCRETE_GPU/ GTX 980 Ti.

Isso acontece no Windows 10 e no GNU / Linux 4.5 usando a API Vulkan 1.0.11 com drivers proprietários da Nvidia.

Esse comportamento é normal e não estou usando a API corretamente ou isso é um bug? Sinto que cometi um erro óbvio evidente, mas não consigo encontrar nada na especificação Vulkan sobre isso.

Para maior clareza, é exatamente assim que consulta a contagem de dispositivos físicos:

auto deviceCount = uint32_t{0};
instance.enumeratePhysicalDevices(&deviceCount, nullptr);
// At this point deviceCount is 1

Além disso, para confirmar que o sistema operacional vê os cartões:

Windows 10:

C:\Users\matt>wmic path win32_VideoController get name
Name
NVIDIA GeForce GTX 980 Ti
NVIDIA GeForce GTX 980 Ti

GPUs nas configurações de driver da Nvidia

Linux 4.5:

+------------------------------------------------------+                       
| NVIDIA-SMI 364.19     Driver Version: 364.19         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 980 Ti  Off  | 0000:01:00.0      On |                  N/A |
|  0%   56C    P8    34W / 300W |    444MiB /  6140MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 980 Ti  Off  | 0000:02:00.0     Off |                  N/A |
|  0%   43C    P8    25W / 300W |     22MiB /  6143MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

GPUs nas configurações da Nvidia XServer


fonte
A GPU integrada é muitas vezes (?) Inativada pela placa-mãe se uma GPU discreta for encontrada. É visível no gerenciador de dispositivos?
Andreas
Isso não é um fator aqui, não me importo com a GPU integrada, apenas com as GPUs discretas.
Está bem. Você é capaz de exibir qualquer coisa usando as duas GPU: s?
Andreas
11
Sim, claro, anexei mais informações para mostrar que o Win10 e o Linux estão pegando os cartões. Eu usei os dois cartões para CUDA e SLI com Direct3D e OpenGL.
11
@Andreas nullptr e NULL diferem apenas porque NULL pode ser mal interpretado como um literal inteiro; ambos são interpretados como constantes de ponteiro nulo em um contexto de ponteiro.
Lars Viklund #

Respostas:

5

Do FAQ do LunarG :

Não há suporte múltiplo à GPU na versão 1.0. Infelizmente, esse foi um recurso que Khronos teve que cortar para preservar a programação. Espera-se que esteja próximo do topo da lista do Vulkan 1.1. É perfeitamente possível para uma implementação Vulkan expor várias GPUs. O que a Vulkan atualmente não pode fazer é permitir o compartilhamento de recursos entre eles. Portanto, do ponto de vista de, por exemplo, um gerenciador de sistemas Windows, é possível reconhecer várias maneiras de renderizar em uma superfície e usar ganchos do sistema operacional para transferi-los para a tela. O que a Vulkan não possui é a capacidade de compartilhar uma textura ou um destino de renderização entre várias GPUs.

Eu consideraria esse problema como algo que não foi implementado porque não era necessário que eles o implementassem ainda. Quando o Vulkan adicionar um melhor suporte multi-GPU a ser exigido em suas especificações, esses problemas provavelmente serão corrigidos. É estranho que ele ainda não exponha as GPUs disponíveis, mas mesmo assim, o Vulkan 1.0.x não está pronto para utilizar várias GPUs de maneira a beneficiar os jogos.

Atualização em 23/07/2016: Com o driver Nvidia GeForce v368.69, várias GPUs ficam visíveis para o Vulkan.

Sem alterar nada (ainda usando a Vulkan API v1.0.11) e atualizar o driver mais recente da Nvidia, tenho acesso total aos dois dispositivos físicos na minha máquina, isso não significa que o suporte a várias GPUs esteja aqui, mas é o primeiro passo em Vulkan, mesmo sendo uma opção viável ao desenvolver um jogo.


fonte
0

Você deveria ter desativado / removido a ponte SLI.
Esse é o óbvio erro óbvio que estou vendo aqui, AFAIK.

bit2shift
fonte
Isso não tem absolutamente nenhuma influência, veja minha resposta, foi resolvido.
@MattJensJensen No momento desta pergunta, a implementação da NVIDIA estava mostrando o combo SLI e não placas individuais, é a isso que estou me referindo.
bit2shift 4/09/16
Não, não era para mim, sem a ponte SLI, apenas uma placa estava visível.