当前位置: 首页 > article >正文

Using Vulkan -- Atomics

原子操作的类型变体想要更好地理解各类相关扩展首先需要了解 Vulkan 提供的不同原子操作类型主要分为以下维度数据类型floatint位宽16 bit32 bit64 bit操作类型加载loads存储stores交换exchange加法add最小值min最大值max其他操作etc.存储类StorageBuffer或Uniform缓冲区Workgroup共享内存Image普通图像或稀疏图像基础支持在 Vulkan 1.0 且未启用任何扩展的情况下应用程序仅可使用32 位整型32-bit int进行原子操作该类型支持所有受支持的 SPIR-V 原子操作加载、存储、交换等。SPIR-V 中部分原子操作受Kernel能力限制目前在 Vulkan 中暂不被允许使用。原子计数器尽管 GLSL 和 SPIR-V 均支持原子计数器的使用但 Vulkan 并未开放使用AtomicCounter存储类所需的AtomicStorageSPIR-V 能力。官方建议应用程序可通过对数值1调用OpAtomicIAdd和OpAtomicISub指令实现原子计数器的同等效果。扩展原子操作支持目前可扩展原子操作支持的相关扩展如下VK_KHR_shader_atomic_int64VK_EXT_shader_image_atomic_int64VK_EXT_shader_atomic_floatVK_EXT_shader_atomic_float2下文将对各扩展进行详细说明。VK_KHR_shader_atomic_int64Promoted to core in Vulkan 1.2GLSL - GL_EXT_shader_atomic_int64此扩展允许在缓冲区和共享内存中执行64 位整型64-bit int原子操作。若声明了Int64AtomicsSPIR-V 能力所有受支持的 SPIR-V 操作均可用于 64 位整型。可通过两个特性位查询 64 位整型原子操作支持的存储类shaderBufferInt64Atomics- 缓冲区shaderSharedInt64Atomics- 共享内存若使用 Vulkan 1.2 及以上版本或设备暴露了该扩展则必然支持shaderBufferInt64Atomics特性。VK_EXT_shader_image_atomic_int64SPV_EXT_shader_image_int64GLSL_EXT_shader_image_int64此扩展允许在普通图像和稀疏图像中执行64 位整型64-bit int原子操作。若同时声明了Int64Atomics和Int64ImageEXTSPIR-V 能力所有受支持的 SPIR-V 操作均可用于图像的 64 位整型原子操作。普通图像与稀疏图像的支持差异该扩展暴露了shaderImageInt64Atomics和sparseImageInt64Atomics两个特性位其中sparseImage*系列特性位为附加特性位仅在shaderImage*特性位启用的前提下才可使用。部分硬件对稀疏资源图像执行原子操作的效率较低因此官方将该原子特性拆分使稀疏图像的原子操作成为实现可选择性暴露的附加特性。VK_EXT_shader_atomic_floatSPV_EXT_shader_atomic_float_addGLSL_EXT_shader_atomic_float此扩展允许在缓冲区、共享内存、普通图像和稀疏图像中执行浮点型float原子操作仅该扩展为浮点类型开放了子集原子操作的支持。该扩展定义了多个特性位可按照*Float*Atomics和*Float*AtomicAdd两类进行分组*Float*Atomics系列特性允许对浮点类型执行OpAtomicStore、OpAtomicLoad和OpAtomicExchange操作。注意OpAtomicCompareExchange比较交换操作未被包含在内因 SPIR-V 规范仅允许该操作作用于整型。*Float*AtomicAdd系列特性允许使用两个扩展的 SPIR-V 操作指令 ——AtomicFloat32AddEXT和AtomicFloat64AddEXT。其余特性位可按32 位浮点和64 位浮点的支持范围进一步划分32 位浮点32-bit float支持shaderBufferFloat32*- 缓冲区shaderSharedFloat32*- 共享内存shaderImageFloat32*- 普通图像sparseImageFloat32*- 稀疏图像64 位浮点64-bit float支持shaderBufferFloat64*- 缓冲区shaderSharedFloat64*- 共享内存OpenGLES 的 OES_shader_image_atomic 扩展允许在r32f格式图像上通过imageAtomicExchange执行原子操作。若要将相关代码移植到 Vulkan应用程序需检查设备是否支持shaderImageFloat32Atomics特性以实现同等功能。VK_EXT_shader_atomic_float2SPV_EXT_shader_atomic_float_min_maxSPV_EXT_shader_atomic_float16_addGLSL_EXT_shader_atomic_float此扩展为VK_EXT_shader_atomic_float补充了两类此前缺失的特性支持第一类16 位浮点型原子操作支持在缓冲区和共享内存中新增16 位浮点16-bit floats原子操作支持使用方式与VK_EXT_shader_atomic_float中的浮点操作一致shaderBufferFloat16*- 缓冲区shaderSharedFloat16*- 共享内存第二类浮点型的最小 / 最大值原子操作支持新增浮点类型的最小值min和最大值max原子操作支持对应指令为OpAtomicFMinEXT和OpAtomicFMaxEXT不同位宽的支持特性位如下16 位浮点需声明AtomicFloat16MinMaxEXT能力shaderBufferFloat16AtomicMinMax- 缓冲区shaderSharedFloat16AtomicMinMax- 共享内存32 位浮点需声明AtomicFloat32MinMaxEXT能力shaderBufferFloat32AtomicMinMax- 缓冲区shaderSharedFloat32AtomicMinMax- 共享内存shaderImageFloat32AtomicMinMax- 普通图像sparseImageFloat32AtomicMinMax- 稀疏图像64 位浮点需声明AtomicFloat64MinMaxEXT能力shaderBufferFloat64AtomicMinMax- 缓冲区shaderSharedFloat64AtomicMinMax- 共享内存

相关文章:

Using Vulkan -- Atomics

原子操作的类型变体 想要更好地理解各类相关扩展,首先需要了解 Vulkan 提供的不同原子操作类型,主要分为以下维度: 数据类型 floatint 位宽 16 bit32 bit64 bit 操作类型 加载(loads)存储(stores&am…...

【人工智能】CCF-A/B/C类期刊最新解析:影响因子、分区与投稿指南

1. CCF期刊分类体系解析 第一次接触CCF期刊目录时,我也被A/B/C的分类搞得一头雾水。简单来说,中国计算机学会(CCF)将计算机领域的国际学术期刊分为A、B、C三个等级,其中A类代表该领域的顶级期刊,相当于学术…...

零基础搞懂Harness Engineering(超详细保姆级教程),告别AI胡说八道,收藏这一篇就够了!

2026年第一季度,大模型应用层最具统治力的热词,绝对是「Harness」。 今年三月,LangChain 发布了一篇题为《The Anatomy of an Agent Harness》的实证文章,彻底点燃了所有人的焦虑与狂热。他们在这份报告里引用了一个实验数据对比…...

JavaScript中类方法中this指向丢失的场景与对策

JavaScript类中方法的this丢失本质是函数单独调用时上下文丢失;常见于回调传递、解构赋值、异步操作三类场景,可通过箭头函数、bind绑定、类字段语法等方案解决。在 JavaScript 类中,方法里的 this 指向丢失,本质是函数被“单独调…...

C#怎么批量删除指定格式文件_C#如何遍历清空目录【干货】

应先用Directory.GetFiles精准匹配再逐个删除,避免Directory.Delete误删或报错;需处理权限、占用、只读等异常,并注意中文路径、ACL跳过、句柄未释放等问题。用 Directory.GetFiles 精准匹配再删,别直接 Directory.Delete批量删指…...

uni-app怎么获取手机端的当前电量信息 uni-app调用系统底层电池状态【实战】

Vue2项目中uni.getBatteryInfo不可用,需通过plus.android/plus.ios调原生:Android监听ACTION_BATTERY_CHANGED广播并计算百分比,iOS需先启用监控并处理归一化值,H5和小程序需分别兼容。uni.getBatteryInfo 在 Vue2 项目里根本不能…...

Cgo回调中处理 const char- 参数的正确方法

本文详解如何在 Cgo 中为 C 回调函数正确声明和实现接收 const char* 参数的 Go 导出函数,解决因类型不匹配导致的编译错误,并提供可直接复用的类型别名方案与完整示例。 本文详解如何在 cgo 中为 c 回调函数正确声明和实现接收 const char* 参数的…...

OpenClaw学习监督:千问3.5-9B定制的个性化学习计划

OpenClaw学习监督:千问3.5-9B定制的个性化学习计划 1. 为什么需要AI学习监督助手 去年我开始自学机器学习时,经常陷入"东一榔头西一棒子"的困境。今天看CNN,明天学Transformer,没有系统规划,三个月后发现知…...

递归封神!二叉树两大究极考题:路径总和 III + 最近公共祖先|面试原地 AC

目录 前言 一、路径总和 III:任意起点、任意终点的路径计数 思路一句话总结 完整 AC 代码 关键点小白精讲 二、二叉树的最近公共祖先:后序遍历的神级应用 思路一句话总结 完整 AC 代码 小白秒懂逻辑 三、两道题核心思想总结 路径总和 III 最近…...

损失2万块买来的教训:出海独立站如何从“裸奔”走向云原生高可用架构?

上个月,我帮一位做跨境宠物用品的老板做了一次紧急的架构救火。起因是他发现网站在正常投放 Google Ads 的情况下,突然大面积访问超时。我介入排查后发现,服务器 CPU 已经飙升到 100%,Nginx 日志里密密麻麻全是针对 /api/checkout…...

.shop 域名 SEO 优化有什么技巧

.shop 域名 SEO 优化有什么技巧 在当今互联网时代,域名不仅仅是一个网站的地址,更是品牌的重要组成部分。特别是随着电子商务的蓬勃发展,.shop 域名逐渐成为电商网站的首选。但是,仅有一个好的.shop 域名并不足以让你在搜索引擎上…...

NCP1654 引脚6(FB):外围电阻、电压范围、计算与测试方法

NCP1654 引脚6(FB):外围电阻、电压范围、计算与测试方法 引脚6(FB)是NCP1654的输出电压反馈/关断控制脚,核心功能是采样PFC输出母线电压,送入内部误差放大器,稳定输出电压&#xff1…...

CSS如何为提示框设置特定颜色标识_使用语义化的自定义属性

安装Npgsql包需区分用途:纯ADO.NET用Npgsql,EF Core用Npgsql.EntityFrameworkCore.PostgreSQL;连接字符串须含Password和Timeout;参数用:name非name;异步操作必须await;连接池需合理配置。安装 Npgsql 包时…...

SEO_2024年SEO最新趋势与实战操作解析

2024年SEO最新趋势解析:如何在百度上取得高排名 随着互联网的迅速发展,2024年的SEO(搜索引擎优化)又迎来了新的变化和挑战。在百度这个最大的中文搜索引擎中,如何提升网站的排名成为每一个网站运营者的共同目标。本文…...

mmdetection, mmclassification, mmsegmentation, mmdetection3d, mmselfsup,mmrazor, openmmlab系列答疑,私有数据集

mmdetection, mmclassification, mmsegmentation, mmdetection3d, mmselfsup,mmrazor, openmmlab系列答疑,私有数据集适配,私有模型适配,分布式训练等 欢迎带问题咨询#辅导作业神器 #助力学习好物...

【UVM】UVM类型转换方法详解与代码示例--$cast/静态转换/虚方法/Factory覆盖/类型识别+转换/Callback机制

UVM类型转换方法详解与代码示例 一、六种类型转换方法的代码示例 1. $cast方法(运行时检查) // 基类和子类定义 class Base extends uvm_object;virtual function void display();`uvm_info("BASE", "Base class display", UVM_LOW);endfunction endc…...

考虑一次调频与二次调频及机组差异化特性的风光水火储双目标动态调度研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

西门子三菱 PLC 编程教程合集|零基础到进阶学习资料整理

在工业自动化领域,PLC 编程是核心技能之一,想要系统掌握西门子、三菱两大品牌的 PLC 编程知识,合适的学习资料能让学习效率事半功倍。本次整理了一批涵盖不同学习阶段的 PLC 编程资料,从零基础入门到针对性机型实操,覆…...

Unity3D实战:从零构建竖屏飞机大战游戏

1. 竖屏游戏的基础设置 第一次打开Unity时,默认是横屏模式。我们需要做的第一件事就是把游戏改成竖屏。这个操作看似简单,但很多新手容易忽略几个关键点。在Game窗口右上角找到分辨率设置,点击加号新建一个预设。这里要特别注意选择"Asp…...

macOS极简安装OpenClaw:gemma-3-12b-it镜像10分钟体验

macOS极简安装OpenClaw:gemma-3-12b-it镜像10分钟体验 1. 为什么选择OpenClawGemma组合 上周我在测试自动化工作流时,偶然发现OpenClaw这个开源框架。它最吸引我的是能直接在本地电脑上实现"AI操控电脑"——就像有个数字员工帮你点击鼠标、整…...

嵌入式开发从入门到精通:C语言、RTOS与Linux实战

1. 嵌入式学习之路:从入门到进阶的完整指南作为一名在嵌入式领域摸爬滚打多年的工程师,我深知这个领域的学习曲线有多陡峭。从最初的51单片机到如今的Linux系统开发,嵌入式技术涵盖了硬件设计、底层驱动、操作系统、网络通信等多个维度。今天…...

树莓派实战指南:从零搭建DHT11温湿度监测系统

1. 认识你的硬件伙伴:DHT11与树莓派 第一次拿到DHT11温湿度传感器时,我盯着这个比指甲盖还小的模块看了半天——就这么个小东西能测量环境数据?后来实测发现它虽然精度不如实验室设备,但家用完全够用。DHT11通过单总线协议通信&am…...

CAN总线分析仪实战:从安装配置到数据收发调试全解析

1. CAN总线分析仪入门指南 第一次接触CAN总线分析仪的朋友可能会觉得这东西有点神秘,其实它就是个帮我们和汽车电子设备"对话"的翻译官。我刚开始用的时候也是一头雾水,后来发现只要掌握几个关键步骤,就能轻松上手。现在市面上常见…...

CAN总线测试与示波器选型实战指南

1. CAN总线测试基础与示波器选型在汽车电子和工业控制领域,CAN总线测试是每个工程师必须掌握的硬核技能。我从事车载诊断系统开发八年,实测过上百个CAN节点,深刻体会到正确使用示波器进行信号测试的重要性。与常见的逻辑分析仪不同&#xff0…...

ESP8266对接GLPi的轻量级IoT工单库

1. 项目概述 glpi_esp8266 是一款专为 ESP8266 系列 Wi-Fi 微控制器设计的轻量级 C 库,其核心使命是构建物联网终端设备与企业级 IT 服务管理(ITSM)平台 GLPi 之间的标准化通信桥梁。该库并非直接对接 GLPi 的 REST API,而是通过…...

无网环境部署:OpenClaw离线安装Qwen3-14B镜像指南

无网环境部署:OpenClaw离线安装Qwen3-14B镜像指南 1. 为什么需要离线部署方案 在金融、政务等对数据安全要求极高的领域,服务器通常运行在严格的Air-gap环境(物理隔离网络)中。去年我在某金融机构做POC时,就遇到了这…...

网站SEO优化如何提高网站权重

网站SEO优化如何提高网站权重 在当今数字化时代,网站SEO优化已经成为提升网站权重的关键因素。无论是小型企业还是大型企业,都在为提升网站在搜索引擎结果页面上的排名而努力。如何通过SEO优化来提高网站权重呢?本文将从问题分析、原因说明、…...

MQ2_LPG气体检测库:嵌入式LPG泄漏监测与动态校准实践

1. MQ2_LPG气体检测库深度解析:面向嵌入式系统的LPG泄漏监测工程实践 1.1 库定位与工程价值 MQ2_LPG是一个专为嵌入式平台设计的轻量级气体传感驱动库,核心目标是实现对液化石油气(Liquefied Petroleum Gas, LPG)中丙烷&#xff…...

OpenClaw多模态开发:Qwen2.5-VL-7B实现自动化图文内容审核

OpenClaw多模态开发:Qwen2.5-VL-7B实现自动化图文内容审核 1. 为什么需要本地化内容审核 去年我接手了一个社区运营项目,每天需要审核数百张用户上传的图片和文字内容。最初尝试用第三方审核API,但很快遇到三个痛点:一是敏感数据…...

AI 伦理与可解释AI

**AI伦理与可解释AI:技术发展的双刃剑** 人工智能(AI)的快速发展正在深刻改变社会,但随之而来的伦理问题与“黑箱”难题也引发广泛讨论。AI伦理关注技术应用的道德边界,而可解释AI(XAI)则致力于…...