自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 【推理框架八股文】为什么只有KV cache,而没有Q cache

摘要:Transformer在自回归生成任务中只缓存K和V而不缓存Q,原因在于注意力机制的计算方式。每一步生成新token时,仅需计算当前token的Q,而历史K和V可复用。公式显示,Attention(Qₜ, K≤ₜ, V≤ₜ)仅需当前Qₜ与缓存的K、V矩阵运算,避免了重复计算历史信息。由于Q每次生成后即弃用,缓存无意义。这种机制显著提升了生成效率。

2025-07-14 12:47:34 1042

原创 【c++八股文】Day6:using和typedef

using是 C++ 中非常重要且用途广泛的关键字,它的作用取决于。

2025-07-10 22:08:42 359

原创 【c++八股文】Day5:const和constexpr,define

│ #define PI 3.14 │ ← 预处理,替换文本,无类型、无调试信息↓│ ← 有类型,有符号,有作用域,可调试↓│ ← 编译期常量表达式,最优性能和安全性#define是预处理器的文本替换,完全不参与类型系统;const是只读变量,具有类型和作用域;constexpr是编译期可求值的常量表达式,是现代 C++ 推荐的写法,支持最强类型安全与编译优化。

2025-07-09 23:37:53 936

原创 【c++八股文】Day4:右值,右值引用,移动语义

C++11引入右值引用(T&&)的主要目的是解决传统C++中的性能瓶颈问题,通过移动语义避免不必要的深拷贝。右值引用可以绑定将亡值(xvalue),允许资源转移而非复制。配合移动构造函数和移动赋值运算符,以及std::move()工具,能显著提升效率,特别是在STL容器操作中。被移动后的对象仍有效但状态未指定,不应依赖其原有值。右值引用是现代C++的核心性能优化手段,实现了更高效的资源管理。

2025-07-08 22:13:40 685

原创 【CUDA】访存单位的区分(向量化读写,内存事务以及扇区)

项目说明向量化读/写(128bit)单线程最多读取 16 byte,有助于提高吞吐内存事务(128byte)warp 级别内存访问被聚合成最多 128 byte 的事务事务的最小单元,最多 4 个 sector 构成一个事务性能关键warp 内的地址尽量连续 + 对齐(例如对齐到 128 字节)

2025-07-03 11:28:19 1060

原创 cuda超越函数expf实现解读

文章摘要:本文推导了计算指数函数exp(x)的快速近似方法,核心思路是将x分解为整数k和小数r,使exp(x)=2^k·2^r。重点分析了CUDA实现中pow2r的数学原理:通过量化技巧计算k,构造残差z=x·ln2+αx-y(y为浮点位图),最后对z进行指数近似(2^z)。该方法利用浮点表示特性,将主要计算量集中在[-0.35,0.35]区间内的低阶多项式近似,实现高效运算。文中给出了完整的公式推导和实现逻辑框架。

2025-06-27 11:47:16 1252 2

原创 【c++八股文】Day3:inline与define与constexpr

特性 / 关键词#defineinlineconstexpr所属阶段预处理阶段编译阶段编译阶段作用对象宏(可替代函数或常量)函数(有时用于类内定义)常量(或常量表达式函数)类型检查❌ 无类型检查✅ 有类型检查✅ 有类型检查安全性❌ 易出错(副作用、优先级)✅ 安全(与普通函数等价)✅ 安全(编译期常量)替换方式文本替换语义替换(函数调用)语义替换(常量值)调试支持❌ 行号不准确✅ 好调试✅ 好调试是否推荐❌ 不推荐✅ 推荐用于小函数。

2025-06-23 23:14:53 257

原创 【CUDA】warp reduce使用__shfl_down_sync__后各个线程的返回值不同解决

CUDA编程中__shfl_down_sync函数在处理warp归约时,当目标线程索引越界(≥32)会返回原值而非取余结果。这导致warp内各线程返回值不一致。解决方法有两种:1) 通过__shfl_sync广播lane_id=0的值;2) 改用__shfl_xor_sync实现跨lane交换数据。两种方案均能正确实现warp内归约操作。

2025-06-13 11:34:20 490

原创 【c++八股文】Day2:虚函数表和虚函数表指针

在保证安全的前提下实现高效运行时多态。

2025-06-11 16:01:13 399

原创 【CUDA】block复用与kWaveNums

本文探讨了GPU编程中block复用与增加block数量(kNumWaves)的平衡问题。二者看似矛盾,实则目标不同:block复用减少启动开销,适合任务量大但每个任务轻的场景;增加block数量提升GPU利用率,适合总任务量小的计算密集型操作。文章通过具体场景示例说明两种策略的适用条件,并给出实践建议:1)评估单个block计算量;2)估算GPU并发能力;3)设置gridDim.x=并发block数×kNumWaves(4-8);4)必要时引入block复用。最终目标是使block数量既能充分占用GPU资

2025-06-11 11:39:58 920

原创 【c++八股文】Day1:new和malloc

特性newmalloc分配方式调用(默认 malloc)调用malloc初始化✅ 调用构造函数❌ 不调用构造函数返回类型指定类型指针(自动推导)void*(需强转)是否需传大小❌ 不需要(编译器自动推导)✅ 需要显式传入异常处理分配失败抛出分配失败返回nullptr可重载✅ 可重载❌ 不可使用语义面向对象、推荐用于类结构体、POD、原始内存块操作是否需要大小为什么malloc✅ 需要函数本身不懂类型,用户告知free❌ 不需要内部已经记录了分配大小new❌ 不需要。

2025-06-09 16:04:24 970

原创 cuda程序一直输出0

我怀疑我的cuda版本和驱动不匹配,我的cuda是12.6但是显卡是gtx1650,我应该在编译时候指定什么参数?

2025-04-27 22:42:25 243

原创 [Git] rebase变基

在pr界面也有update branch的选项,我没有注意选择update with merge commit和update with rebase,现在已经选择了update with merge commit,因此多了一个commit在远端,现在我又落后远程仓库了,我希望不要有这个merge commit,连带之前的也取消掉,我应该怎么做。场景:提交了pr但是远程仓库更新了,这时候需要将这个pr的commit变基到最新的提交。在feature-branch下。

2025-04-07 16:16:28 235

原创 [Git] 使用ssh链接github仓库

【代码】[Git] 使用ssh链接github仓库。

2025-03-26 11:29:46 185

原创 【LeetCode】KMP算法

我们只需要将当前模式串中的指针移动从索引0开始的最大长度的位置,也即2,对应字符。,之后我们继续逐个移动字符进行匹配,如此直至找到匹配的子串或者文本串结束。把失败的后缀作为下一次匹配的前缀,这就是KMP算法的基本思想。如果直接计算每个子串的最长前后缀的长度,那么计算的复杂度将达到。,我们的目标是在文本串中寻找是否有子串与模式串相同。的下一个字符匹配失败的时候,我们查阅前缀表,得知。相同前后缀的最大长度为2,我们的目标是将。,但是在下一个字符的匹配中失败了。我们在失败的匹配中,匹配了两次。

2025-03-05 23:15:35 812

原创 [工具配置]AstroNvim安装流程

Astronvim安装流程

2025-01-28 10:34:17 566

原创 【CUDA笔记】为什么增加bank数可以提高总线带宽的利用率?

DRAM系统常采用bank和channel技术来提高访问效率,处理器包含一个或者多个channel,每个channel都是一个内存控制器,其总线将一组DRAM存储体连接到处理器,如下图所示:下图进一步解释了为什么bank技术可以提升channel的数据传输带宽。其中灰色的部分称为access latency,黑色的部分称为data transfer time。在实际中,access latency远远长于data transfer time。

2025-01-15 17:59:14 382

原创 【CUDA笔记】Tiling的访存优化分析

shared memory常用来作为数据缓存存储中间结果等。

2025-01-02 21:19:18 810

原创 【CUDA实验报告】CUDA中的误差累积导致的精度问题

以矩阵乘法复现CUDA中因为误差累积而导致的精度问题。

2025-01-01 23:48:35 571

原创 【CUDA手册】CUDA中的函数前缀及说明

CUDA中的函数前缀代表函数的不同用途,包括:__global__, __device__, __host__等

2025-01-01 16:59:47 290

原创 【CUDA手册】CUDA中的内存类型

对比介绍了CUDA中的register,local memory,shared memory,global memory,const memory以及各自的用途。

2024-12-30 21:14:35 1669

原创 Transformer的抽象理解

从抽象的角度来理解self-attention奇怪的数学公式

2024-12-27 16:27:26 719

原创 【CUDA手册】为什么cudaMalloc()需要一个指针的指针?

cudaFree和cudaMalloc的设计差异源于它们的功能和使用方式。让我们详细解释为什么cudaFree只需要一个指针参数,而cudaMalloc需要一个指针的指针作为参数。

2024-12-16 16:42:15 663

原创 DLsys-14-卷积实现

简述卷积的三种实现方式:逐元素乘累加,矩阵乘法,im2col

2024-12-13 23:29:06 715

原创 C++中为什么要有万能引用和完美转发

在模板函数中,形参类型写作T&&时,可能会出现一种特别的情况:它既能匹配左值引用(lvalue reference),也能匹配右值引用(rvalue reference)。这就是所谓的万能引用。

2024-12-11 17:59:52 1459

原创 C++如何从unique_ptr基类指针访问派生类对象的成员

基类指针指向派生类对象时,这个基类指针只能调用基类的成员函数。一个常用的做法是在基类中定义虚函数,派生类实现。这样使用基类指针调用对象的该方法时,不同的对象会有不同的行为从而实现多态。方法获取原始指针,然后进行类型转换。这种方法不会释放所有权,但需要确保在转换后正确管理所有权。是运行时类型检查,确保转换是安全的。如果基类指针实际上指向的不是派生类对象,转换将失败。如果你释放了原始指针的所有权(如使用。方法来释放所有权,然后将原始指针转换为派生类指针,最后重新包装为。方法),确保在转换后重新包装为。

2024-11-26 19:30:02 532

原创 C++传参为什么要传引用

在定义引用时,程序将引用和它的初始值在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起,将引用重新绑定给另外一个对象是不可行的,也因此引用必须初始化。在C++中,函数参数的传递方式有多种,包括传值、传引用和传指针。选择哪种方式取决于具体的需求和场景。

2024-11-20 11:52:18 331

原创 PYNQ3.0镜像制作 基于ZYBO Z7-20

基于Vitis2022.1、Petalinux2022.1、ubuntu20.04、Zybo-Z7-20构建Pynq3.0镜像

2023-08-09 09:36:03 1962 6

原创 解决使用git clone报错问题

【代码】解决使用git clone报错问题。

2023-08-06 15:24:39 255

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除