2017-07-07 12 views
0

私は最大論理デバイス番号をテストするために次のコードを書いています。vulkanには論理デバイス作成の最大数制限がありますか?

#include "vulkan/vulkan.hpp" 
#include <cassert> 
#include <vector> 
#include <iostream> 

int main() { 

    std::vector<vk::Instance> instances; 
    std::vector<vk::Device> devices; 

    try { 

     for(; true;) { 

      vk::InstanceCreateInfo instanceInfo {}; 
      instances.push_back(vk::createInstance(instanceInfo)); 

      auto physicalDevices = instances.back().enumeratePhysicalDevices(); 
      if(0 == physicalDevices.size()) 
       return 0; 

      vk::DeviceQueueCreateInfo deviceQueueCreateInfo {}; 
      deviceQueueCreateInfo.queueFamilyIndex = 0; 
      deviceQueueCreateInfo.queueCount = 1; 

      vk::DeviceCreateInfo deviceCreateInfo {}; 
      deviceCreateInfo.queueCreateInfoCount = 1; 
      deviceCreateInfo.pQueueCreateInfos = &deviceQueueCreateInfo; 
      auto device = physicalDevices.front().createDevice(deviceCreateInfo); 
      if(!device) { 
       throw 0; 
      } 
      devices.push_back(device); 
     } 
    } 
    catch(std::system_error e) { 
     std::cout << e.what() << std::endl 
      << e.code() << std::endl; 
    } 
    catch(...) { 
    } 

    for(auto device : devices) 
     device.destroy(); 
    for(auto instance : instances) 
     instance.destroy(); 
    printf("Maximum device is %d\n", devices.size()); 
    return static_cast<int>(devices.size()); 
} 

次は私のテスト結果は次のとおりです。 のWindows 10の64ビット8G RAM GTX 750Ti:最大デバイスは Ubuntuの8G RAM GTX 750Ti、42です:最大:最大デバイスは63、 のWindows 10の64ビット16G RAMのGTX 1080デバイスが42、 Ubuntu 64G RAM Titan X:最大デバイスが31,

このテスト結果では、ロジックデバイス作成の最大数制限があり、オペレーティングシステムによって制限が異なる場合があります。私は限界に関する文書を見つけることができません、この限界を得る方法はありますか?もう1つの質問、もし私がサーバー上で多数のvulkanアプリケーションを実行したいのであれば、どうすればこの制限を克服できますか?

+0

"サーバー上で多数のvulkanアプリケーションを実行したいのですが、どうすればこの制限を克服できますか?サーバが複数のGPUを持っていない限り、私はそれが何であるかは分かりません。各デバイスは、他のすべてのデバイスとコンピューティングリソースを共有する必要があります。 1台のデバイスで1つのプロセスを使用する方が効率的ですし、ファームにジョブを出して、各デバイスに与えるリソースの数を決めることができます。 –

+0

また、コードでは論理デバイスの数だけでなく、*インスタンス数もテストすることに注意してください。 –

答えて

4

バルカンスペックはこれだけ言う:

複数の論理デバイスが同じ物理デバイスから作成することができます。論理デバイスの作成は、(他のエラーに加えて)デバイス固有のリソースがないために失敗することがあります。その場合、vkCreateDeviceはVK_ERROR_TOO_MANY_OBJECTSを返します。

ので(それぞれは一部リソースを使用しなければならないので、明らかに、すべてのリソースは有限である)あなたが作成できるデバイスの数が限られているが、その数は実装依存です。

バルカン適合性テストでは、create at least five devicesが必要です。

使用されているリソースの一部がシステム全体ではなくプロセス単位である可能性があります。あなたは、それぞれが単一のVkDeviceを作成するプロセスの束を産み出そうとしましたか?

しかし、あなたの唯一の選択肢は、より高い制限を持つ別の実装を使用することです。あるいは、ハードウェアベンダーに、デバイスあたりのリソースを制限して、より高い制限をサポートするようにします。

関連する問題