我寫了下面的代碼來測試最大邏輯器件編號。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());
}
以下是我的測試結果: 視窗10的64位8G RAM GTX 750Ti:最大設備是42, Ubuntu的8G RAM GTX 750Ti:最大設備是63, 視窗10的64位16G RAM GTX 1080:最大設備是42, Ubuntu 64G RAM泰坦X:最大設備是31,
測試結果表明vulkan具有邏輯設備創建的最大數量限制,並且這些限制可能因操作系統而異。我沒有找到任何有關限制的文件,有什麼辦法可以達到這個限制?另一個問題,如果我想在服務器上運行大量的vulkan應用程序,我該如何克服這個限制?
「*如果我想在服務器上運行大量的vulkan應用程序,我該如何克服這個限制?*」到底是什麼?除非服務器有多個GPU,否則我不確定這點是什麼。每臺設備都必須與其他設備共享計算資源。使用單個設備進行單個進程可能更高效,並將作業存入其中,從而可以決定爲每個設備分配多少資源。 –
還應該注意的是,您的代碼也會測試* instance *計數,而不僅僅是邏輯設備的數量。 –