Vulkan vkEnumeratePhysicalDevices Gibt die unerwartete Anzahl von Geräten zurück

8

In der Maschine, die ich laufe, habe ich zwei GTX 980 Tis. Wenn ich die Anzahl der physischen Geräte abfrage vkEnumeratePhysicalDevices, wird immer 1 zurückgegeben, obwohl 2 physische diskrete Grafikkarten vorhanden sind. Wenn ich vulkaninfodas einzige aufgeführte Gerät benutze , ist GPU0das ein DISCRETE_GPU/ GTX 980 Ti.

Dies geschieht sowohl unter Windows 10 als auch unter GNU / Linux 4.5 unter Verwendung der Vulkan API 1.0.11 mit proprietären Nvidia-Treibern.

Ist das normal und ich benutze die API nicht richtig oder ist das ein Fehler? Ich habe das Gefühl, einen offensichtlichen Fehler gemacht zu haben, aber ich kann in der Vulkan-Spezifikation nichts darüber finden.

Aus Gründen der Übersichtlichkeit frage ich genau so die Anzahl der physischen Geräte ab:

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

Um zu bestätigen, dass das Betriebssystem die Karten sieht:

Windows 10:

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

GPUs in den Nvidia-Treibereinstellungen

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 in den Nvidia XServer-Einstellungen


quelle
Die integrierte GPU wird vom Motherboard häufig (?) Inaktiviert, wenn eine diskrete GPU gefunden wird. Ist es im Geräte-Manager sichtbar?
Andreas
Das ist hier kein Faktor, mir ist die integrierte GPU egal, nur die diskreten GPUs.
OK. Können Sie mit beiden diskreten GPUs etwas anzeigen?
Andreas
1
Ja, natürlich habe ich weitere Informationen angehängt, um zu zeigen, dass sowohl Win10 als auch Linux die Karten abholen. Ich habe beide Karten für CUDA sowie SLI mit Direct3D und OpenGL verwendet.
1
@Andreas nullptr und NULL unterscheiden sich nur darin, dass NULL als ganzzahliges Literal falsch interpretiert werden kann. Beide werden als Nullzeigerkonstanten in einem Zeigerkontext interpretiert.
Lars Viklund

Antworten:

5

Von dem LunarG FAQ :

In Version 1.0 gibt es keine Unterstützung für mehrere GPUs. Das war leider ein Feature, das Khronos kürzen musste, um den Zeitplan einzuhalten. Es wird erwartet, dass Vulkan 1.1 ganz oben auf der Liste steht. Es ist durchaus möglich, dass eine Vulkan-Implementierung mehrere GPUs verfügbar macht. Was Vulkan derzeit nicht tun kann, ist die gemeinsame Nutzung von Ressourcen zwischen ihnen zuzulassen. So ist es beispielsweise aus Sicht eines Windows-Systemmanagers möglich, mehrere Möglichkeiten zum Rendern auf einer Oberfläche zu erkennen und diese dann mithilfe von Betriebssystem-Hooks auf den Bildschirm zu übertragen. Was Vulkan nicht hat, ist die Fähigkeit, eine Textur oder ein Rendering-Ziel zwischen mehreren GPUs zu teilen.

Ich würde dieses Problem als etwas abschreiben, das nicht implementiert wurde, weil es noch nicht erforderlich war, dass sie es implementieren. Wenn Vulkan eine bessere Unterstützung für mehrere GPUs hinzufügt, die in seiner Spezifikation erforderlich ist, werden diese Probleme höchstwahrscheinlich behoben. Es ist seltsam, dass die verfügbaren GPUs immer noch nicht verfügbar gemacht werden, aber selbst wenn dies der Fall ist, ist Vulkan 1.0.x nicht bereit, mehrere GPUs so einzusetzen, dass Spiele davon profitieren.

Update vom 23.07.2016: Mit dem Nvidia GeForce-Treiber v368.69 sind für Vulkan mehrere GPUs sichtbar.

Ohne Änderungen vorzunehmen (weiterhin die Vulkan API v1.0.11 zu verwenden) und auf den neuesten Treiber von Nvidia zu aktualisieren, habe ich vollen Zugriff auf beide physischen Geräte auf meinem Computer. Dies bedeutet nicht, dass die Unterstützung für mehrere GPUs hier ist, aber es ist der erste Schritt in Vulkan sogar eine gute Wahl bei der Entwicklung eines Spiels.


quelle
0

Sie sollten die SLI-Brücke deaktiviert / entfernt haben.
Das ist der offensichtliche Fehler, den ich hier sehe. AFAIK.

bit2shift
quelle
Das hat absolut keinen Einfluss darauf, siehe meine Antwort, es wurde gelöst.
@MattJensJensen Zum Zeitpunkt dieser Frage zeigte die Implementierung von NVIDIA die SLI-Kombination und nicht einzelne Karten, darauf beziehe ich mich.
Bit2shift
Nein, ohne die SLI-Brücke war nur eine Karte sichtbar.