【发布时间】:2017-07-07 02:47:16
【问题描述】:
我编写了以下代码来测试最大逻辑设备数。
#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 64bit 8G RAM GTX 750Ti:最大设备为 42, Ubuntu 8G RAM GTX 750Ti:最大设备为 63, Windows 10 64bit 16G RAM GTX 1080:最大设备为 42, Ubuntu 64G RAM Titan X:最大设备数为 31,
测试结果表明vulkan有创建逻辑设备的最大数量限制,限制可能因操作系统而异。我没有找到任何关于限制的文件,有没有办法得到这个限制?另一个问题,如果我想在服务器上运行大量的 vulkan 应用程序,我该如何克服这个限制?
【问题讨论】:
-
"如果我想在服务器上运行大量的 vulkan 应用程序,我该如何克服这个限制?" 到底是为了什么?除非服务器有多个 GPU,否则我不确定这有什么意义。每个设备都必须与其他所有设备共享计算资源。使用单个设备拥有单个进程并将作业分配给它可能会更有效,允许它决定为每个设备分配多少资源。
-
还应注意,您的代码还测试 instance 计数,而不仅仅是逻辑设备的数量。