C++ vulkan是否具有逻辑设备创建的最大数量限制?
我编写了以下代码来测试最大逻辑设备数C++ vulkan是否具有逻辑设备创建的最大数量限制?,c++,nvidia,vulkan,C++,Nvidia,Vulkan,我编写了以下代码来测试最大逻辑设备数 #include "vulkan/vulkan.hpp" #include <cassert> #include <vector> #include <iostream> int main() { std::vector<vk::Instance> instances; std::vector<vk::Device> devices; try {
#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() );
}
#包括“vulkan/vulkan.hpp”
#包括
#包括
#包括
int main(){
std::向量实例;
std::矢量设备;
试一试{
因为(;真;){
vk::InstanceCreateInfo instanceInfo{};
push_back(vk::createInstance(instanceInfo));
auto physicalDevices=instances.back().enumeratePhysicalDevices();
如果(0==physicalDevices.size())
返回0;
vk::DeviceQueueCreateInfo DeviceQueueCreateInfo{};
deviceQueueCreateInfo.queueFamilyIndex=0;
deviceQueueCreateInfo.queueCount=1;
vk::DeviceCreateInfo DeviceCreateInfo{};
deviceCreateInfo.queueCreateInfoCount=1;
deviceCreateInfo.pqueCreateInfos=&deviceQueueCreateInfo;
自动设备=physicalDevices.front().createDevice(deviceCreateInfo);
如果(!设备){
掷0;
}
设备。推回(设备);
}
}
捕获(标准::系统错误e){
Vulkan规范仅说明了以下内容:
可以从同一物理设备创建多个逻辑设备。由于缺少设备特定资源(以及其他错误),逻辑设备创建可能会失败。如果出现这种情况,vkCreateDevice将返回VK_ERROR_TOO_MANY_对象
因此,您可以创建的设备数量是有限的(显然,因为每个设备都必须使用一些资源,而所有资源都是有限的),但数量取决于实现
Vulkan一致性测试要求您能够
有些资源可能是每个进程使用的,而不是整个系统使用的。您是否尝试过生成一组进程,每个进程创建一个VkDevice
但如果不能做到这一点:您唯一的选择是使用具有更高限制的不同实现,或者游说硬件供应商减少每个设备(或任何设备)的资源使用量,以支持更高的限制。Vulkan规范仅说明:
可以从同一物理设备创建多个逻辑设备。由于缺少设备特定资源(以及其他错误),逻辑设备创建可能会失败。如果出现这种情况,vkCreateDevice将返回VK_ERROR_TOO_MANY_对象
因此,您可以创建的设备数量是有限的(显然,因为每个设备都必须使用一些资源,而所有资源都是有限的),但数量取决于实现
Vulkan一致性测试要求您能够
有些资源可能是每个进程使用的,而不是整个系统使用的。您是否尝试过生成一组进程,每个进程创建一个VkDevice
但失败的是:您唯一的选择是使用具有更高限制的不同实现,或游说硬件供应商减少每个设备(或任何设备)的资源以支持更高的限制。“如果我想在服务器上运行大量vulkan应用程序,我如何克服此限制?”到底是为了什么目的?除非服务器有多个GPU,否则我不确定这有什么意义。每个设备都必须与其他每个设备共享计算资源。用一个设备共享一个进程可能会更有效,并将作业分配给它,让它决定给每个设备多少资源。我还应注意的是,您的代码还测试实例计数,而不仅仅是逻辑设备的数量。“如果我想在服务器上运行大量vulkan应用程序,我如何克服这一限制?”到底是为了什么目的?除非服务器有多个GPU,否则我不确定这有什么意义。每个设备都必须与其他每个设备共享计算资源。用一个设备共享一个进程可能会更有效,并将作业分配给它,让它决定给每个设备多少资源。我还应注意,您的代码还测试实例计数,而不仅仅是逻辑设备的数量。