[英]Does vulkan has the maximum number limits of logic device creation?
我編寫了以下代碼來測試邏輯設備的最大數量。
#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:最大設備為42個,Ubuntu 8G RAM GTX 750Ti:最大設備為63個,Windows 10 64位16G RAM GTX 1080:最大設備為42個,Ubuntu 64G RAM Titan X:最大設備數為31,
測試結果表明,vulkan具有創建邏輯設備的最大數量限制,並且該限制可能會因操作系統而異。 我找不到有關限制的任何文檔,是否有任何方法可以獲取此限制? 另一個問題,如果我想在服務器上運行大量vulkan應用程序,該如何克服這個限制?
Vulkan規范僅說明了這一點:
可以從同一物理設備創建多個邏輯設備。 由於缺少特定於設備的資源(除了其他錯誤),邏輯設備創建可能會失敗。 如果發生這種情況,vkCreateDevice將返回VK_ERROR_TOO_MANY_OBJECTS。
因此,您可以創建的設備數量是有限的(顯然,因為每個設備都必須使用一些資源,並且所有資源都是有限的),但是設備數量取決於實現。
某些資源可能是按進程使用的,而不是整個系統的。 您是否嘗試過產生一堆進程,每個進程都創建一個VkDevice?
但是失敗了:您唯一的選擇是使用具有更高限制的其他實現,或者游說硬件供應商以減少每台設備(或任何其他設備)使用的資源來支持更高的限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.