私は最大論理デバイス番号をテストするために次のコードを書いています。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アプリケーションを実行したいのであれば、どうすればこの制限を克服できますか?
"サーバー上で多数のvulkanアプリケーションを実行したいのですが、どうすればこの制限を克服できますか?サーバが複数のGPUを持っていない限り、私はそれが何であるかは分かりません。各デバイスは、他のすべてのデバイスとコンピューティングリソースを共有する必要があります。 1台のデバイスで1つのプロセスを使用する方が効率的ですし、ファームにジョブを出して、各デバイスに与えるリソースの数を決めることができます。 –
また、コードでは論理デバイスの数だけでなく、*インスタンス数もテストすることに注意してください。 –