Vulkan vkEnumeratePhysicalDevices retournant un nombre de périphériques inattendu

8

Dans la machine que je lance, j'ai deux GTX 980 Tis. Lorsque je demande le nombre de périphériques physiques, vkEnumeratePhysicalDevicesil renvoie toujours 1 malgré 2 cartes graphiques physiques discrètes. Lorsque j'utilise vulkaninfole seul appareil répertorié GPU0est un DISCRETE_GPU/ GTX 980 Ti.

Cela se produit dans Windows 10 ainsi que GNU / Linux 4.5 en utilisant Vulkan API 1.0.11 avec des pilotes Nvidia propriétaires.

Est-ce un comportement normal et je n'utilise pas correctement l'API ou s'agit-il d'un bug? J'ai l'impression d'avoir fait une erreur évidente mais je ne trouve rien dans la spécification Vulkan à ce sujet.

Pour plus de clarté, voici exactement comment je demande le nombre de périphériques physiques:

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

De plus, pour confirmer que le système d'exploitation voit les cartes:

Windows 10:

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

GPU dans les paramètres du pilote 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 |
+-------------------------------+----------------------+----------------------+

GPU dans les paramètres Nvidia XServer


la source
Le GPU intégré est souvent (?) Désactivé par la carte mère si un GPU discret est trouvé. Est-il visible dans le gestionnaire de périphériques?
Andreas
Ce n'est pas un facteur ici, je ne me soucie pas du GPU intégré, seulement des GPU discrets.
D'accord. Pouvez-vous afficher quoi que ce soit à l'aide des deux GPU discrets?
Andreas
1
Oui, bien sûr, j'ai joint plus d'informations pour montrer que Win10 et Linux récupèrent les cartes. J'ai utilisé les deux cartes pour CUDA ainsi que SLI avec Direct3D et OpenGL.
1
@Andreas nullptr et NULL ne diffèrent que par le fait que NULL peut être mal interprété comme un littéral entier, ils sont tous deux interprétés comme des constantes de pointeur nul dans un contexte de pointeur.
Lars Viklund

Réponses:

5

De la FAQ LunarG :

La version 1.0 ne prend pas en charge plusieurs GPU. C'était malheureusement une fonctionnalité que Khronos a dû supprimer afin de respecter le calendrier. Il devrait être en haut de la liste pour Vulkan 1.1. Il est parfaitement possible pour une implémentation Vulkan d'exposer plusieurs GPU. Ce que Vulkan ne peut pas faire actuellement, c'est autoriser le partage de ressources entre eux. Ainsi, d'un point de vue, par exemple, d'un gestionnaire de système Windows, il est possible de reconnaître plusieurs façons de rendre sur une surface, puis d'utiliser des crochets du système d'exploitation pour le transférer à l'écran. Ce que Vulkan n'a pas, c'est la possibilité de partager une texture ou une cible de rendu entre plusieurs GPU.

J'écrirais ce problème comme étant quelque chose qui n'a pas été implémenté car il n'était pas nécessaire qu'ils l'implémentent encore. Lorsque Vulkan ajoute une meilleure prise en charge multi-GPU à exiger dans ses spécifications, ces problèmes seront très probablement résolus. Il est étrange qu'il n'expose toujours pas les GPU disponibles, mais même si c'était le cas, Vulkan 1.0.x n'est pas prêt à utiliser plusieurs GPU d'une manière qui profiterait aux jeux.

Mise à jour du 23/07/2016: Avec le pilote Nvidia GeForce v368.69, plusieurs GPU sont visibles pour Vulkan.

Sans rien changer (toujours en utilisant l'API Vulkan v1.0.11) et mettre à jour le dernier pilote de Nvidia, j'ai un accès complet aux deux périphériques physiques sur ma machine, cela ne signifie pas que la prise en charge multi-GPU est bien là, mais c'est la première étape dans Vulkan étant même un choix viable lors du développement d'un jeu.


la source
0

Vous devriez avoir désactivé / supprimé le pont SLI.
C'est l' erreur évidente flagrante que je vois ici AFAIK.

bit2shift
la source
Cela n'a absolument aucun rapport avec cela, voyez ma réponse, cela a été résolu.
@MattJensJensen Au moment de cette question, l'implémentation de NVIDIA montrait le combo SLI et non des cartes individuelles, c'est à cela que je fais référence.
bit2shift
Non, ce n'était pas pour moi, sans le pont SLI, une seule carte était visible.