【问题标题】:Does vulkan has the maximum number limits of logic device creation?vulkan 是否有逻辑设备创建的最大数量限制?
【发布时间】: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 计数,而不仅仅是逻辑设备的数量。

标签: c++ nvidia vulkan


【解决方案1】:

Vulkan 规范只这么说:

可以从同一个物理设备创建多个逻辑设备。由于缺少特定于设备的资源(除了其他错误),逻辑设备创建可能会失败。如果发生这种情况,vkCreateDevice 将返回 VK_ERROR_TOO_MANY_OBJECTS。

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

Vulkan 一致性测试要求您能够create at least five devices

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

但如果做不到这一点:您唯一的选择是使用具有更高限制的不同实现,或者游说硬件供应商使用更少的每台设备(或其他)资源来支持更高的限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 2021-05-29
    • 2014-02-18
    • 1970-01-01
    • 2016-06-06
    • 2016-02-22
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多