Vulkan vkEnumeratePhysicalDevicesが予期しないデバイス数を返す


8

私が実行しているマシンには、2つのGTX 980 Tiがあります。vkEnumeratePhysicalDevices2つの物理ディスクリートグラフィックカードがあるにもかかわらず、物理デバイスカウントを照会すると、常に1が返されます。vulkaninfoリストされている唯一のデバイスを使用する場合、GPU0それはDISCRETE_GPU/ GTX 980 Tiです。

これは、Windows 10およびGNU / Linux 4.5で、Vulkan API 1.0.11と独自のNvidiaドライバーを使用して発生します。

これは通常の動作で、APIを正しく使用していませんか、それともバグですか?私は明白な間違いを犯したように感じますが、それについてのVulkan仕様には何も見つかりません。

わかりやすくするために、これは物理デバイス数を照会する方法とまったく同じです。

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

また、OSがカードを認識していることを確認するには:

ウインドウズ10:

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

Nvidiaドライバー設定のGPU

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 |
+-------------------------------+----------------------+----------------------+

Nvidia XServer設定のGPU

vulkan 

統合型GPUは、ディスクリートGPUが見つかった場合、マザーボードによって(?)無効化されることがよくあります。デバイスマネージャーに表示されますか?
Andreas

それはここでは要因ではありません。統合されたGPUは気にせず、ディスクリートGPUだけを気にします。

OK。両方のディスクリートGPUを使用して何かを表示できますか?
Andreas

1
はい、もちろん、Win10とLinuxの両方がカードを取り上げていることを示すために、より多くの情報を添付しました。私は、CUDAとDirect3DおよびOpenGLでのSLIの両方のカードを使用しました。

1
@Andreas nullptrとNULLの違いは、NULLが整数リテラルとして誤って解釈される可能性があることだけで、どちらもポインターコンテキストでnullポインター定数として解釈されます。
Lars Viklund、2016年

回答:


5

LunarG FAQから:

バージョン1.0では、複数のGPUサポートはありません。残念ながら、これはクロノスがスケジュールを維持するために削減しなければならない機能でした。Vulkan 1.1のリストのトップ近くになると予想されます。Vulkan実装が複数のGPUを公開することは完全に可能です。Vulkanが現在実行できないことは、それらの間でリソースを共有できるようにすることです。したがって、たとえばWindowsシステムマネージャの観点からは、サーフェスにレンダリングする複数の方法を認識し、オペレーティングシステムのフックを使用して画面に転送することが可能です。Vulkanにはないものは、複数のGPU間でテクスチャまたはレンダーターゲットを共有する機能です。

この問題は、まだ実装する必要がないため、実装されなかったものとして書き留めます。Vulkanが仕様で要求されるより優れたマルチGPUサポートを追加すると、これらの問題はおそらく修正されます。それでも利用可能なGPUが公開されないのは奇妙ですが、公開されたとしても、Vulkan 1.0.xはゲームに利益をもたらすような方法で複数のGPUを利用する準備ができていません。

2016年7月23日の更新:Nvidia GeForceドライバーv368.69では、複数のGPUがVulkanに表示されます。

何も変更せず(まだVulkan API v1.0.11を使用)、Nvidiaの最新ドライバーに更新しなくても、マシンの両方の物理デバイスに完全にアクセスできます。これは、マルチGPUサポートが完全にサポートされていることを意味するわけではありませんが、最初のステップです。バルカンでは、ゲーム開発の実行可能な選択肢でさえあります。


0

SLIブリッジを無効化/削除する必要があります。
それは私がここで見ている明白な間違いである


それはまったく関係ありません。私の答えを見てください。解決されました。

@MattJensJensenこの質問の時点で、NVIDIAの実装はSLIコンボを示していて、個々のカードを示していませんでした。それが私が言及しているものです。
bit2shift

いいえ、SLIブリッジがなければ、カードは1枚しか見えませんでした。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.