繁体   English   中英

vulkan是否具有逻辑设备创建的最大数量限制?

[英]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。

因此,您可以创建的设备数量是有限的(显然,因为每个设备都必须使用一些资源,并且所有资源都是有限的),但是设备数量取决于实现。

Vulkan一致性测试要求您至少可以创建五个设备

某些资源可能是按进程使用的,而不是整个系统的。 您是否尝试过产生一堆进程,每个进程都创建一个VkDevice?

但是失败了:您唯一的选择是使用具有更高限制的其他实现,或者游说硬件供应商以减少每台设备(或任何其他设备)使用的资源来支持更高的限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM