如何查询Vulkan中子组可访问的本地内存大小
有的,Vulkan中存在等价的查询能力,对应你要的计算单元本地内存(也就是Vulkan计算着色器中用shared关键字声明的共享内存)的大小查询可以通过以下方式实现:
你需要调用核心API vkGetPhysicalDeviceProperties,从返回的物理设备属性结构体的限制字段中读取maxComputeSharedMemorySize,该值单位为字节,和OpenCL中CL_DEVICE_LOCAL_MEM_SIZE返回的参数含义完全对应。
示例代码如下:
VkPhysicalDeviceProperties physicalDeviceProperties; // 传入你要查询的VkPhysicalDevice实例 vkGetPhysicalDeviceProperties(physicalDevice, &physicalDeviceProperties); // 读取计算单元可访问的本地共享内存大小 VkDeviceSize localMemSize = physicalDeviceProperties.limits.maxComputeSharedMemorySize;
补充说明:
- 该值表示单个计算工作组最多可以使用的共享内存容量,符合Vulkan规范的设备最低支持该值不小于16384字节(16KB),常见消费级GPU通常返回32KB或48KB,专业计算卡可能支持更高的64KB及以上容量。
- 如果你需要查询针对特定队列家族的额外限制,可以配合
VK_KHR_get_physical_device_properties2扩展查询对应队列家族的属性,绝大多数通用计算场景下直接读取全局的maxComputeSharedMemorySize即可满足需求。
内容的提问来源于stack exchange,提问作者alagris
相关产品推荐
相关产品推荐

