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

浅析 DeepSeek 开源的 FlashMLA 项目

浅析 DeepSeek 开源的 FlashMLA 项目

DeepSeek 开源周 Day 1(2025 年 2 月 24 日)放出的开源项目——FlashMLA,是一款针对 Hopper 架构 GPU 高效多层级注意力 (Multi-Level Attention, MLA) 解码内核,专门为处理变长序列问题而设计。

趁热浏览一下:GitHub - deepseek-ai/FlashMLA


一、概述

传统的注意力计算方法在面对变长序列长序列推理时,往往面临显存碎片和访存延迟等问题。针对这一点,FlashMLA 通过以下几个关键方向实现性能突破:

  • 分页 KV 缓存管理:针对长序列推理中显存碎片严重的问题,FlashMLA 实现了一种基于 64-block 粒度的分页 KV 缓存,极大提高了显存利用率,缓解内存访问瓶颈。
  • 基于 Hopper 架构的深度优化:利用 NVIDIA Hopper GPU 上的 SM90 架构特性,FlashMLA 借助 Tensor Memory Accelerator (TMA) 异步内存拷贝指令,实现 GDDR6 到共享内存(SRAM)的零拷贝传输,从而接近理论峰值带宽。
  • 双模式执行引擎:为了适应不同输入序列长度的场景,FlashMLA 采用动态负载均衡算法,设计了双模式执行策略,即在短序列下采用计算优化模式,在长序列下采用内存优化模式,使得整体延迟大幅降低。

通过这些主要创新,FlashMLA 解决了长文本生成、实时对话和多模态模型中注意力计算效率低下的问题。

二、项目架构概览

FlashMLA 这个项目很精炼,代码量很小:

::: center
项目结构图
:::

项目代码结构清晰,共分为以下几个主要模块:

  • CUDA 内核层:位于 csrc/ 目录下,包含 FlashMLA 的核心实现文件,如 flash_fwd_mla_bf16_sm90.cuflash_fwd_mla_kernel.h。这些文件利用 CUDA 和 CUTLASS 库实现了对注意力计算的深度优化:
    • flash_fwd_mla_bf16_sm90.cu:专为 Hopper 架构设计的 BF16 计算内核,通过模板实例化调用具体的内核函数。
    • flash_fwd_mla_kernel.h:定义了主要的内核参数结构和模板,包括共享内存布局、矩阵乘法调度(TiledMma)、全局内存拷贝策略等。
    • named_barrier.hsoftmax.hstatic_switch.h:提供硬件同步、混合精度 softmax 以及静态分支选择等辅助工具。
    • cutlass/ 子模块:集成了 NVIDIA CUTLASS 库,支持高效矩阵运算。
  • Python 接口层:位于 flash_mla/ 目录下,主要文件为 flash_mla_interface.py。这一层为上层应用提供了简单易用的 API 封装,使得用户可以直接在 PyTorch 中调用 FlashMLA 内核:
    • get_mla_metadata:负责根据输入的缓存序列长度和维度信息,生成调度元数据(tile_scheduler_metadata)和 block_table 的分割指标(num_splits)。
    • flash_mla_with_kvcache:核心 API 函数,内部调用底层 CUDA 内核,完成注意力计算。函数中包括张量维度校验、CUDA 内核启动及返回结果封装等步骤。
  • 内存管理子系统:位于 csrc/flash_api.cpp 中,实现了分页 KV 缓存机制。这种设计使得对长序列的动态内存分配更加灵活,并通过硬件加速指令(如 __ldg())提高内存访问效率。
  • 计算调度系统:主要分布在 flash_fwd_mla_kernel.h 中,使用 tile_scheduler_metadata 进行动态负载均衡。该系统通过分析输入序列长度,调整计算和内存预取策略,实现内存和计算优化模式的切换,以达到最佳的总体性能。

::: center
计算调度系统图
:::

三、技术实现细节解析

1. CUDA 内核模块的核心设计

模板元编程和 CUTLASS 应用
FlashMLA 内核广泛使用了模板元编程技术,使得内核能够在编译期完成类型和参数选择。以 Flash_fwd_kernel_traits_mla 为例,该模板定义了:

  • 基本参数:包括注意力头维度(kHeadDim)、块大小(kBlockM 和 kBlockN)、和线程数量(kNThreads)。
  • 共享内存布局:通过辅助函数 getSmemLayoutK() 来确定共享内存中各数据块的存放方式。该函数利用 if constexpr 分支,保证内存访问对齐,例如:
  if constexpr (headSizeBytes % 128 == 0 && headSizeBytes2 % 128 == 0) {return GMMA::Layout_K_SW128_Atom<PrecType>{};} else if constexpr (headSizeBytes % 64 == 0 && headSizeBytes2 % 64 == 0) {return GMMA::Layout_K_SW64_Atom<PrecType>{};} else {return GMMA::Layout_K_SW32_Atom<PrecType>{};}

这种选择机制保证了在不同的数据排列和对齐条件下,都能达到最高效的共享内存访问。

Warp Specialization 及双缓冲技术
FlashMLA 利用了 Warp Specialization 技术,将内核中的线程分成不同组:

  • 计算组:负责实际的矩阵乘法和 softmax 计算。
  • IO 组:负责加载 Q、K 数据到共享内存,并进行预取操作。

双缓冲设计在共享内存中维护两个 buffer,用于数据的交替加载和计算。在块切换时,内核可以预加载下一块数据,利用异步内存拷贝(cp.async 指令),从而隐藏内存延迟,大幅提升整体吞吐量。

异步拷贝和流水线调度
基于 Hopper GPU 的 TMA(Tensor Memory Accelerator)特性,FlashMLA 内核通过 cp.async 指令实现异步内存拷贝:

cp.async.ca.shared.global [addr], [reg], 128;

这种指令使得 GPU 能够在计算过程中同时加载数据,与传统同步内存拷贝相比能降低延迟。进一步,内核还设计了指令级流水线,以连续 overlapped 执行计算和内存传输,实现内存带宽与计算吞吐的最佳平衡。

2. 内存管理子系统解析

内存管理是 FlashMLA 的一大亮点,关键在于如何高效管理长序列下的 KV 缓存。FlashMLA 采用了分页 KV 缓存机制,关键思想如下:

  • 64 Block 粒度:每个缓存块大小设定为 64 个元素(例如,对于 BF16 来说,每个元素 2 字节,64×576 即 72KB 级别内存),这一设计既能保证足够的数据并行度,又能避免因内存碎片产生的浪费。
  • 动态内存映射:利用 BlockTable 结构,记录各序列当前已分配的内存块和对应的指针。内核在运行时,通过 __ldg() 指令加速访问这张分页表,保证了极低的延迟。
  • 零拷贝优化:内核在访问块数据时,采用基于常量缓存的只读访问模式,利用硬件的缓存优化技术降低全局内存访问开销,进一步提升内存带宽利用率。

3. Python 接口层与易用性考量

flash_mla_interface.py 中,FlashMLA 的 Python 接口提供了友好的 API 封装,使得用户可以轻松地将高性能 CUDA 内核整合到 PyTorch 模型中。主要函数包括:

  • get_mla_metadata:接收输入的缓存序列长度、各头注意力数量等信息,调用底层 CUDA 库生成 tile_scheduler_metadata 和 num_splits。返回的数据用作后续 CUDA 内核调度与分块。
  • flash_mla_with_kvcache:该函数是用户直接调用的接口。其内部首先对输入张量维度进行校验,再调用 flash_mla_cuda.fwd_kvcache_mla() 启动 CUDA 内核。用户只需传入 query、KV 缓存、块表、缓存序列长度以及其他调度参数,即可获得注意力计算的输出和 softmax LSE(LogSumExp)。

这种设计不仅降低了使用门槛,同时隐藏了 CUDA 内核的复杂细节,使得主流深度学习框架的用户也能受益。

4. 计算调度系统与动态负载均衡

FlashMLA 在长序列推理过程中需处理数据的不均衡问题,因此设计了一套动态调度系统。该系统的核心在于利用 tile_scheduler_metadata 进行分块调度,确保各计算单元能够根据实际输入长度自动调整工作量。这种智能调度确保了在各种工作负载下都能达到最佳性能。

  • 动态负载均衡:内核在启动时根据输入序列的长度和 batch 大小,动态计算最优的计算块数,并在内核执行过程中通过命名屏障(NamedBarrier)实现线程间细粒度同步。这样既减少了全局同步的开销,又确保了数据计算与内存预取的高效衔接。
  • 双模式执行:调度系统根据输入序列的长度,自动在「内存优化模式」和「计算优化模式」之间切换:
    • 当序列较长时,侧重内存预取和分页管理;
    • 当序列较短时,则主要强调计算吞吐。

四、性能表现与优势

FlashMLA 不仅能够极大提高注意力计算的速度,同时还能有效降低推理延迟,提升用户体验。在性能上展现出惊人的表现:

  • 内存带宽:在内存受限配置下,达到最高 3000 GB/s。
  • 计算吞吐:在计算受限配置下,峰值可达 580 TFLOPS。
  • 整体时延:针对长序列,端到端时延降低约 40%,这对于实时对话系统、大规模文本生成等场景意义重大。

五、与同生态位其他方案的对比

在注意力优化技术领域,当前主流方案还包括 FlashAttention-3、xFormers、FasterTransformer 等。下面对这些方案与 FlashMLA 进行简要比较(注意:数据可能有误差,需进一步验证):

::: center
方案对比图
:::

差异分析:

  • 内存管理方式:FlashMLA 利用分页 KV 缓存大幅提高显存利用率,而 FlashAttention-3 则采用连续内存布局。对于长序列任务(例如超过 4K tokens 的生成任务),FlashMLA 的分页机制可以有效避免内存溢出,同时提高带宽利用率。
  • 硬件适配性:FlashMLA 是专为 Hopper 架构设计,而 FlashAttention-3 则兼容性更强,支持 Ampere 架构。对于用户而言,选择哪种方案取决于所使用 GPU 的架构及预期负载。
  • 执行模式与吞吐:FlashMLA 采用双模式执行引擎,根据实际序列长度切换内存和计算优化模式,这使得在长序列场景下能够获得较低延迟和较高吞吐,而其他方案在短序列或固定格式任务下可能更优秀。

整体来看,如果在长序列任务和跨模态任务中有较高要求,FlashMLA 是十分合适的选择;而在资源受限或需求多样的场景下,需根据实际硬件和应用需求进行权衡选择。

六、项目未来展望

尽管 FlashMLA 在技术上取得了巨大突破,但仍存在值得改进的地方。

  • 硬件兼容性增强:当前 FlashMLA 主要针对 Hopper 架构,对于 A100 或 T4 等其他 GPU 架构,建议开发 fallback 内核。这样不仅可以拓宽用户群,还能在多种硬件平台上保持良好性能。
  • 自动化调优工具:针对不同长度和批量的输入,内核参数(如分块大小 kBlockM、kBlockN)需要手动调优。未来可以考虑引入自动分块调优器,甚至基于强化学习算法动态选择最优参数,降低使用难度。
  • 扩展数据精度支持:随着 FP8、INT8 等低精度计算的逐步普及,将 FlashMLA 扩展到支持量化计算,可以在保证性能的同时进一步提升吞吐,特别是在边缘设备部署时显得尤为重要。
  • 改进代码可维护性和异常处理:目前内核代码高度模板化,虽然性能优秀但调试与维护难度较高。未来建议增加详细注释、API 类型注解以及全面的测试覆盖率,并设计出健壮的错误恢复机制,比如自动内存扩容方案。
  • 分布式分页与异构计算支持:对于大规模分布式系统,跨多卡管理统一块表(利用 NCCL 等技术)以及 CPU-GPU 协同分页管理将成为亟待解决的问题。这样的扩展将使 FlashMLA 能够在超大规模模型(如超过百万 tokens)中发挥更大优势。

七、总结

FlashMLA 项目代表了注意力机制优化领域的最新突破,它采用分页 KV 缓存、Hopper TMA 异步拷贝以及双模式执行等技术,实现了以下目标:

  • 高效长序列处理:突破传统内存管理瓶颈,在长文本生成与多模态应用中展现出极佳的性能表现。
  • 硬件深度优化:利用最新 GPU 架构的特性,充分发挥硬件性能,达到极高的内存带宽利用率和计算吞吐。
  • 智能调度与负载均衡:设计动态调度系统,根据不同输入自动选取最佳执行模式,兼顾内存与计算资源的高效利用。

FlashMLA 同时也面临一些挑战,包括较高的代码复杂度、对特定硬件架构的依赖以及未来扩展性不足等问题。总体来看,该项目在大模型及长序列任务中具有显著优势,适合追求极致性能的场景,如大语言模型预训练与微调、实时对话系统以及生物信息领域的大规模序列分析等。

FlashMLA 作为大模型时代的基础设施级项目,其技术突破和性能优化为深度学习社区带来了全新的思路。对于 GPU 性能极致追求者而言,FlashMLA 是不可多得的重要工具;而在长期维护和多平台扩展方面,则需要持续投入精力和技术资源进行完善。

相关文章:

浅析 DeepSeek 开源的 FlashMLA 项目

浅析 DeepSeek 开源的 FlashMLA 项目 DeepSeek 开源周 Day 1&#xff08;2025 年 2 月 24 日&#xff09;放出的开源项目——FlashMLA&#xff0c;是一款针对 Hopper 架构 GPU 高效多层级注意力 (Multi-Level Attention, MLA) 解码内核&#xff0c;专门为处理变长序列问题而设…...

【Blender】二、建模篇--08,小狐狸角色建模

这堂课呢 我们来完成本套课程建模片的最后一个模型 小狐狸 这堂课呢 主要想让大家一起走一遍角色建模的一个基本流程 让你以后遇到类似的模型时候有一个基本的建模思路 那我们现在就开始吧 2 00:00:16,830 --> 00:00:24,390 我们还是在我们之前建模马拉松的那个文件里面继…...

【Gin-Web】Bluebell社区项目梳理6:限流策略-漏桶与令牌桶

本文目录 一、限流二、漏桶三、令牌桶算法四、Gin框架中实现令牌桶限流 一、限流 限流又称为流量控制&#xff0c;也就是流控&#xff0c;通常是指限制到达系统的并发请求数。 限流虽然会影响部分用户的使用体验&#xff0c;但是能一定程度上保证系统的稳定性&#xff0c;不至…...

MySQL 数据库基础

1. MySQL 数据库基础 在这一部分&#xff0c;我们将学习 MySQL 的基本概念和常见的数据库操作&#xff0c;帮助你掌握如何创建数据库、表&#xff0c;并进行数据的增、删、改操作。同时&#xff0c;我们还会探讨一些常见的错误示例及其原因&#xff0c;帮助你避免常见的陷阱。…...

如何查看java的字节码文件?javap?能用IDEA吗?

编译指令&#xff1a; javac YourProject.java 查看字节码文件的指令&#xff1a; javap -c -l YourProject.class 不添加-c指令就不会显示字节码文件&#xff1a; 不添加 -l 就不会显示源代码和字节码文件的对应关系&#xff1a; 添加-l之后多出来这些&#xff1a; IDEA不太…...

实战技巧:如何快速提高网站收录的权威性?

快速提高网站收录的权威性是一个系统性的工作&#xff0c;涉及内容质量、网站结构、外部链接、用户体验等多个方面。以下是一些实战技巧&#xff0c;可以帮助你快速提升网站收录的权威性&#xff1a; 一、提升内容质量 原创性&#xff1a; 确保网站内容具备高质量与原创性&a…...

详解传输层协议TCP/UDP

传输层 传输层是OSI模型的第四层&#xff0c;主要负责端到端的数据传输&#xff0c;确保数据可靠、有> 序地从源设备传送到目标设备。其主要功能包括&#xff1a; 端到端通信&#xff1a;在源和目标设备之间建立连接&#xff0c;确保数据准确传输。数据分段与重组&#xff1…...

案例|某开关站室外轮式巡检机器人解决方案

随着电网规模的扩大和复杂性的增加&#xff0c;传统的GIS开关设备巡视工作面临着巨大的挑战。人工巡视不仅劳动强度大、效率低&#xff0c;而且难以保证巡视的准确性和全面性。此外&#xff0c;GIS设备通常位于复杂的环境中&#xff0c;如高海拔、高湿度、强电磁干扰等&#xf…...

穿越虚拟与现实:解密Linux进程的地址空间

在 Linux 操作系统中&#xff0c;每个进程都有独立的虚拟地址空间。虚拟地址空间是操作系统为每个进程提供的抽象内存模型&#xff0c;它使得每个进程都觉得自己拥有独立的内存&#xff0c;而不需要关心物理内存的具体布局。本文将深入探讨 Linux 进程的虚拟地址空间及其管理机…...

什么是MySql的主从复制(主从同步)?

主页还有其他面试题总结&#xff0c;有需要的可以去看一下&#xff0c;喜欢的就留个三连再走吧~ 1.什么是MySql的主从复制原理&#xff1f; 主从复制的核心就是二进制binlog&#xff08;DDL&#xff08;数据定义语言&#xff09;语句和DML&#xff08;数据操纵语言&#xff09…...

C++面向对象编程技术研究

一、引言 面向对象编程&#xff08;OOP&#xff09;是一种程序设计方法&#xff0c;它将现实世界中的实体抽象为“对象”&#xff0c;并通过类和对象来实现程序的设计。OOP的核心思想包括封装、继承和多态&#xff0c;这些特性使得程序更加模块化、易于扩展和维护。C作为一种支…...

MySQL 连表查询:原理、语法与优化

目录 引言 什么是连表查询&#xff1f; 连表查询的类型 1. 内连接&#xff08;INNER JOIN&#xff09; 2. 左连接&#xff08;LEFT JOIN&#xff09; 3. 右连接&#xff08;RIGHT JOIN&#xff09; 4. 全连接&#xff08;FULL JOIN&#xff09; 5. 交叉连接&#xff08;…...

力扣2382. 删除操作后的最大子段和

力扣2382. 删除操作后的最大子段和 题目 题目解析及思路 题目要求找到每次删除一个元素的最大字段和 因为删除不好做&#xff0c;可以转删除为添加&#xff0c;用并查集维护当前子段和 两部分合并(两个并查集)&#xff0c;三部分求和(两个并查集和一个元素) 代码 class S…...

PMP--题库--一模--纯问题

文章目录 单选题 &#xff08;每题1分&#xff0c;共170道题&#xff09;1、 [单选] 根据项目的特点&#xff0c;项目经理建议选择一种敏捷方法&#xff0c;该方法限制团队成员在任何给定时间执行的任务数。此方法还允许团队提高工作过程中问题和瓶颈的可见性。项目经理建议采用…...

C++核心指导原则: 错误处理

C Core Guidelines 整理目录 哲学部分接口(Interface)部分函数部分类和类层次结构部分枚举部分资源管理部分性能部分错误处理 E: Error handling E.1: Develop an error-handling strategy early in a design 翻译: 在设计早期制定一个错误处理策略。原因: 为确保代码的健壮…...

豆包、扣子等产品如何与CSDN合作?

要实现CSDN开发者社区与豆包、扣子等产品的深度合作&#xff0c;构建创作者Agent生态体系&#xff0c;可通过以下结构化方案实现技术、生态与商业价值的闭环&#xff08;含具体实施路径与数据指标&#xff09;&#xff1a; 一、战略合作框架搭建 开放平台互通 建立三方API网关&…...

C#开发——ConcurrentDictionary集合

ConcurrentDictionary<TKey, TValue> 是 C# 中一个专为多线程场景设计的线程安全字典集合&#xff0c;位于 System.Collections.Concurrent 命名空间中。它允许多个线程同时对字典进行读写操作&#xff0c;而无需额外的同步措施。 一、集合特征 此集合有如下特征…...

CSS `transform` 属性详解:打造视觉效果与动画的利器

CSS transform 属性详解&#xff1a;打造视觉效果与动画的利器 引言一、transform 属性简介二、平移&#xff08;Translation&#xff09;三、旋转&#xff08;Rotation&#xff09;四、缩放&#xff08;Scale&#xff09;五、倾斜&#xff08;Skew&#xff09;六、组合变换&am…...

Python 进阶特性深度解析:从语法糖到内存管理的统一视角

生成式(推导式)的用法与内存效率分析 Python 的推导式不仅仅是语法糖,它们在内存管理和性能方面有着深刻的影响。理解推导式的工作原理,有助于我们写出更高效的代码。 推导式的内存模型分析 列表推导式在 CPython 解释器中的实现实际上比等价的 for 循环更为高效: # 列…...

eclipse配置Spring

1、从eclipse下载Spring工具 进入 help – install new software… &#xff0c;如下图&#xff1a; 点击 add &#xff0c;按以下方式输入&#xff1a; Name : Spring Location : http://dist.springsource.com/release/TOOLS/update/e4.10/ 之后点击 add &#xff0c;等待…...

属性绑定

双大括号不能在html属性中使用&#xff0c;想要响应式地绑定一个属性&#xff0c;应用v-bind指令 <script > export default{data(){return{dynamicId:"appid",dynamicClass:"appclass"}} } </script><template><div v-bind:id"…...

深入讲解微信小程序 <canvas> 标签的 type=“2d“属性

在微信小程序开发中&#xff0c;<canvas> 组件是一个非常强大的工具&#xff0c;允许开发者创建动态图形和动画。然而&#xff0c;正确设置 <canvas> 的 type 属性是确保其正常工作的关键之一。本文将深入探讨 type"2d" 属性的重要性、使用场景及其在实际…...

基于PSO-LSTM长短期记忆神经网络的多分类预测【MATLAB】

一、研究背景与意义 在时间序列分类、信号识别、故障诊断等领域&#xff0c;多分类预测任务对模型的时序特征捕捉能力提出了极高要求。传统LSTM网络虽能有效建模长程依赖关系&#xff0c;但其性能高度依赖超参数的选择&#xff0c;例如隐含层神经元数量、学习率、迭代次数等。…...

Linux----线程

一、基础概念对比 特性进程 (Process)线程 (Thread)资源分配资源分配的基本单位&#xff08;独立地址空间&#xff09;共享进程资源调度单位操作系统调度单位CPU调度的最小单位创建开销高&#xff08;需复制父进程资源&#xff09;低&#xff08;共享进程资源&#xff09;通信…...

自注意力机制和CNN的区别

CNN&#xff1a;一种只能在固定感受野范围内进行关注的自注意力机制。​CNN是自注意力的简化版本。自注意力&#xff1a;具有可学习感受野的CNN。自注意力是CNN的复杂形态&#xff0c;是更灵活的CNN&#xff0c;经过某些设计就可以变为CNN。 越灵活、越大的模型&#xff0c;需要…...

【qt链接mysql】

首先根据自己qtcreater 下载mysql安装包 将mysql安装目录下的如下目录中的xxx\MySQL\MySQL Server 5.7\lib\libmysql.dll 拷贝到QT目录C:\Qt\5.7\mingw53_32\bin 下&#xff08;当前这个也是我电脑上的Qt路径&#xff0c;请找到你Qt对应的bin路径&#xff09; 直接在文win11上…...

Parameter 与 Param 有什么区别

Parameter 与 Param Parameter 与 Param 意思相同&#xff0c;在大多数情况下可以互换使用&#xff0c;它们在用法和语境有一些细微的区别 1、Parameter Parameter 是一个完整的单词&#xff0c;是正式术语&#xff0c;广泛用于数学、统计学、计算机科学、工程等领域 在数学…...

【前端】【功能函数】treeMapEach,对每个节点进行自定义转换的实用函数

一、功能说明 这是一个递归遍历树形结构数据&#xff0c;并对每个节点进行自定义转换的实用函数。它会对原始树中的每个节点执行 conversion 函数&#xff0c;最终生成一个包含转换后结果的新树结构。 二、核心作用 树形结构遍历&#xff1a;深度优先递归遍历所有子节点数据…...

C#初级教程(5)——解锁 C# 变量的更多奥秘:从基础到进阶的深度指南

一、变量类型转换&#xff1a;隐式与显式的门道 &#xff08;一&#xff09;隐式转换&#xff1a;编译器的 “贴心小助手” 隐式转换是编译器自动进行的类型转换&#xff0c;无需开发者手动干预。这种转换通常发生在将取值范围小的数据类型赋值给取值范围大的数据类型时&#…...

初步学习java 动态代理

前言 在学习 动态代理知识之前&#xff0c;可以先了解 反射 反射的复习-CSDN博客 场景 我们知道&#xff0c;一些大明星开演出会&#xff0c;要收门票&#xff0c;准备场景啥的。但很显然 明星&#xff0c;他们主要还是 唱歌&#xff0c;跳舞&#xff0c;和粉丝互动。那么 其…...

QT 基础知识点

1.基础窗口类QMainWindow qDialog Qwidget 随项目一起创建的窗口基类有三个可选QMainWindow qDialog Qwidget 1.1 Qwidget 是所有窗口的基类&#xff0c;只要是他的子类&#xff0c;或子类的子类&#xff0c;都具有他的属性。 右键项目 Add New -> Qt qt设计师界面类&am…...

unity学习53:UI的子容器:面板panel

目录 1 UI的最底层容器&#xff1a;canvas 1.1 UI的最底层容器&#xff1a;canvas 1.2 UI的合理结构 2 UI的子容器&#xff1a;面板panel 2.1 创建panel 2.2 面板的本质&#xff1a; image &#xff0c;就是一个透明的图片&#xff0c;1个空容器 3 面板的属性 4 面板的…...

Qt如何将数据传入labview,Qt又如何从labview中读取数据?

Qt如何将数据传入labview,Qt又如何从labview中读取数据? Qt如何将数据传入labviewQt如何从labview中读取数据 Qt如何将数据传入labview Qt如何从labview中读取数据...

JWT使用教程

目录 JWT (JSON Web Token)1. JWT简介(1) 什么是JWT(2) JWT有什么用(3) JWT认证方式 2. JWT的组成部分3. 签名的目的4. JWT与Token的区别5 JWT的优势6 JJWT签发与验证token(1) 引入依赖(2) 创建 Token(3) 解析Token(4) 设置过期时间(5) 自定义claims 7. JWT自定义工具类 JWT (J…...

数据结构——静态顺序表,动态顺序表

线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的 数据结构&#xff0c;常⻅的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的⼀条直线。但是在…...

前端Sass面试题及参考答案

目录 什么是 Sass? Sass 和 CSS 的主要区别是什么? Sass 中如何处理列表? Sass 中如何处理映射(map)? Sass 中如何使用函数? Sass 中如何使用内置函数? Sass 中如何设置默认值? Sass 中的 @function 和 @mixin 有什么区别? Sass 中如何实现模块化? Sass 中…...

ubuntu20.04音频aplay调试

1、使用指定声卡&#xff0c;aplay 播放命令 aplay -D plughw:1,0 test2.wav2、 录音 arecord -Dhw:1,0 -d 10 -f cd -r 44100 -c 2 -t wav test.wav3、各个参数含义 -D 指定声卡编号 plughw:0,0 //0,0代表card0,device0&#xff0c;可以通过arecord -l获取 -f 录音格式 S16_LE…...

比特信噪比与信噪比SNR的换算公式

在无线通信系统中&#xff0c;比特信噪比与信噪比&#xff08;SNR&#xff0c;通常指符号信噪比Es/N0&#xff09;的换算&#xff1a; 核心公式 E b N 0 SNR R ⋅ log ⁡ 2 M \boxed{ \frac{E_b}{N_0} \frac{\text{SNR}}{R \cdot \log_2 M} } N0​Eb​​R⋅log2​MSNR​​ 或…...

RTSP场景下RTP协议详解及音视频打包全流程

RTSP场景下RTP协议详解及音视频打包全流程 一、RTSP与RTP的关系 RTSP&#xff1a;负责媒体会话控制&#xff08;DESCRIBE、SETUP、PLAY、PAUSE&#xff09;&#xff0c;通过SDP协商传输参数&#xff08;端口、编码格式、封装模式&#xff09;。RTP&#xff1a;实际传输音视频数…...

java练习(39)

ps:题目来自力扣 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以…...

2.24DFS和BFS刷题

洛谷P2895&#xff1a;用BFS走出危险区域&#xff0c;危险区域存在时间&#xff0c;我们用ma记录最快变成危险区域的时间&#xff0c; 然后每次枚举时间1然后跟ma数组比较看能不能走&#xff0c;然后时间复杂度为O(305^2)。 #include<iostream> #include<cstring>…...

基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

赛前启航 | 三场重磅直播集结,予力微软 AI 开发者挑战赛!

随着微软 AI 开发者挑战赛的火热进行&#xff0c;赛前指导直播已成为众多参赛者获取技术干货、灵感碰撞和实战技巧的绝佳平台。继前两期的精彩呈现&#xff0c;第三、四、五期直播即将接连登场&#xff0c;为开发者们带来更加深入的 AI 技术剖析和项目实战指引。无论你是想进一…...

MySQL数据库连接池泄露导致MySQL Server超时关闭连接

前言 最近做项目&#xff0c;发现老项目出现xxx&#xff0c;这个错误其实很简单&#xff0c;出现在MySQL数据库Server端对长时间没有使用的client连接执行清楚处理&#xff0c;因为是druid数据库&#xff0c;且在github也出现这样的issue&#xff1a;The last packet successf…...

Deepseek和Grok 3对比:写一段冒泡排序

1、这是访问Grok 3得到的结果 2、grok3输出的完整代码&#xff1a; def bubble_sort(arr):n len(arr) # 获取数组长度# 外层循环控制排序轮数for i in range(n):# 内层循环比较相邻元素&#xff0c;j的范围逐渐减少for j in range(0, n - i - 1):# 如果当前元素大于下一个元…...

EX_25/2/22

找到第一天mystring练习&#xff0c;实现以下功能 mystring str "hello" mystring ptr "world" str str ptr; str ptr str[0] H #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #in…...

el-select滚动获取下拉数据;el-select滚动加载

el-select下拉获取数据 1.解决问题2.封装MyScrollSelect组件3.使用MyScrollSelect组件 1.解决问题 场景&#xff1a;下拉数据量过大&#xff0c;后端提供一个分页查询接口&#xff1b;需要每次滚动加载下一页的下拉数据 且单选的状态&#xff0c;需要支持回显&#xff0c;通过n…...

Spring Boot面试题

Spring Boot面试题 基础概念 Q1: Spring Boot的核心特性有哪些&#xff1f; public class SpringBootBasicDemo {// 1. 自动配置SpringBootApplicationpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class…...

STM32-智能小车项目

项目框图 ST-link接线 实物图&#xff1a; 正面&#xff1a; 反面&#xff1a; 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 一、让小车动起来 新建文件夹智能小车项目 在里面复制19-串口打印功能 重命名为01-让小车动起来 新建文件夹motor&…...

SAP-ABAP:ABAP第一代增强详解

在SAP ABAP开发中&#xff0c;第一代增强&#xff08;First-Generation Enhancement&#xff09; 是早期用于扩展标准程序功能的传统技术&#xff0c;主要通过预定义的增强点&#xff08;Enhancement Points&#xff09;实现。以下是详细解析&#xff1a; 一、第一代增强的核心…...