簡體   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