- 博客(27)
- 收藏
- 关注
原创 cuda中Cacheline和sector的区别
在 CUDA 架构(尤其是 Maxwell 之后的架构)中,3. 为什么引入 Sector?引入扇区结构是为了解决。
2025-12-17 14:16:34
372
原创 cuda中内存访问详解
这些宏的核心目的是实现类型重解释(Type Reinterpretation),即将一块内存中存储的二进制数据,按照另一种数据类型的布局来解读。这在 GPU 编程中是实现向量化内存访问和数据打包的关键技术。作用:将value的内存地址解释为一个指向int4类型数组的指针,然后取该数组的第 0 个元素。本质:假设value是一个int类型的变量,并且它在内存中的地址是0x1000。这个宏会告诉编译器:“不要把0x1000处的数据看作一个单独的int,而是把从0x1000开始的连续 4 个int。
2025-11-26 11:41:43
250
原创 Triton中维度转换
张量元素坐标内存偏移量公式代码计算出的off_*形状XX[i, j, l]YY[i, l, k]理解了off_x和off_y的计算,你就掌握了 Triton 内核中数据寻址的核心。接下来的tl.load操作就是利用这些计算好的偏移量,从全局内存中抓取一块数据到线程块的寄存器中,为后续的tl.dot计算做准备。
2025-11-25 14:20:31
527
原创 torch.gather
pythoninput(Tensor):源张量,我们从中收集数据。dim(int):要收集数据的维度。这决定了我们沿着哪个方向进行“索引”或“查找”。index(LongTensor):索引张量,它告诉我们在dim维度上,要从input的哪个位置取值。index的形状必须与input的形状相同(除了在dim维度上可以不同,但在实践中,我们通常让它们形状完全一致)。(bool, optional):如果为 True,关于input的梯度将是稀疏张量。想象一下,你有一个表格(input),gather。
2025-11-21 15:31:37
663
原创 LSE讲解
Log-Sum-Exp 是一个数学函数,它的定义如下:对于一组实数 x1,x2,...,xn,LSE 为:简单来说,就是先对每个元素取指数(exp),然后将它们相加,最后再对总和取对数(logLSE代表。它是计算softmax和时的一个关键中间步骤。这个选项允许你获取这个中间计算结果,这在测试或需要进一步数值计算时非常有用。但它返回的 LSE 值本身不是概率,需要额外处理才能得到概率。
2025-11-21 14:21:59
283
原创 torch.unsqueeze讲解
操作原始形状结果形状直观理解[5][1, 5]把向量变成了一个行矩阵[5][5, 1]把向量变成了一个列矩阵。
2025-11-19 15:02:53
404
原创 torch.arange
python特性功能生成一个等步长的一维数列。区间左闭右开核心参数start(起点),end(终点),step(步长)常用场景创建索引、生成简单的数值序列、在循环中定义范围等。注意与已弃用的区分开。希望这个详细的讲解能帮助你彻底掌握的用法!
2025-11-19 14:29:55
641
原创 vllm中生成token的流程
请求1:输入token [t0, t1] → 需要t1的hidden state来生成t2请求2:输入token [t0, t1, t2] → 需要t2的hidden state来生成t3请求3:输入token [t0] → 需要t0的hidden state来生成t1。
2025-11-07 09:40:55
892
原创 vllm deepseek model中输入参数说明
混合位置编码:通过和实现参数效率:使用LoRA减少可训练参数量扩展性:支持长序列处理和模型量化灵活性:每个组件都可以独立配置这样的设计让模型在保持高性能的同时,大幅降低了计算和存储需求。
2025-08-23 13:25:43
664
原创 python 中全局锁理解
情况效果原因严格排队单工作线程,任务顺序执行+ CPU密集型有限并发GIL限制真正并行,但线程切换提供并发+ I/O密集型良好并发I/O操作释放GIL,线程可真正并行处理场景效果解释单线程Worker遇到CPU操作阻塞Worker和事件循环Worker-1持有GIL进行计算,事件循环抢不到GIL,被阻塞。单线程Worker遇到I/O操作不阻塞事件循环Worker-1主动释放GIL,事件循环可以立即获取GIL并继续工作。多线程Workers遇到I/O更好地利用等待时间。
2025-08-21 15:09:27
662
原创 hopper中的架构特性
https://zhuanlan.zhihu.com/p/708645371https://zhuanlan.zhihu.com/p/709750258https://www.zhihu.com/question/11261005710/answer/93139551976
2025-07-01 08:37:59
206
原创 deepseek 中two batch overlap学习
https://zhuanlan.zhihu.com/p/1910048095816877891
2025-06-27 17:26:56
284
原创 pytorch 操作之squeeze
python运行# 创建一个最后一维尺寸为 1 的张量print("原始张量形状:", x.shape) # 输出: torch.Size([3, 1])# 移除最后一个维度print("操作后张量形状:", y.shape) # 输出: torch.Size([3])print(y)# 输出: tensor([1, 2, 3])这里,原始张量是形状为[3, 1]的二维张量,通过移除了最后一个维度,变成了形状为[3]的一维张量。python运行# 创建一个最后一维尺寸不为 1 的张量。
2025-06-27 15:02:33
776
原创 pytorch 操作之unflatten
在 PyTorch 里,unflatten是一个很实用的函数,其功能是将张量的特定维度重新组织为多个维度,属于扁平化操作的逆过程。下面为你详细讲解该函数的用法。
2025-06-27 14:28:59
478
原创 pytorch 操作之广播机制
在 PyTorch 中,大多数二元操作都会在输入张量维度不匹配时尝试触发广播机制。理解广播机制的规则,有助于编写简洁且高效的代码。在进行张量运算时,要确保两个张量满足广播条件,避免出现错误。广播机制中新增的元素是为0吗在 PyTorch 的广播机制里,新增的元素并非是 0。实际上,广播机制是通过复制已有数据来实现维度扩展的,并不会真的在内存里创建新的数据副本,这样可以高效地完成运算。广播不创建新数据:广播只是在逻辑上扩展张量维度,运算时复用已有数据。不涉及填充 0。
2025-06-27 14:24:08
714
原创 pytorch 操作之scatter_
是 PyTorch 中一个非常有用的张量操作函数,主要用于在张量的指定位置上进行赋值操作。这个函数是原地操作,即它会直接修改原张量的值,而不会返回新的张量。python运行 的核心逻辑是:根据 中的索引值,将 中的值对应地放到目标张量 的指定位置上。具体来说:python运行这里, 中的值 、、 分别被放到了 张量的索引 、、 位置上。python运行这个例子中,我们根据 张量的值,将 中的每个元素放到 的指定列位置上。独热编码(One-Hot Encoding):pytho
2025-06-27 14:16:18
493
1
原创 pytorch 中dim使用教程
指定了操作沿着哪个维度 “压缩” 或 “合并” 张量。的含义对于正确使用张量操作至关重要。下面通过具体例子说明。会得到完全不同的结果,因此在使用张量操作时需要特别注意。(维度)参数用于指定操作应用的方向。对于一维张量,只有一个维度(在 PyTorch 中,通过这些例子可以看出,
2025-06-27 11:51:07
639
原创 CUDA 学习笔记
学习视频: cuda编程从入门到入土 p1 - hello-gpu_哔哩哔哩_bilibili当线程数不足的话,如何解决。如果在memcp和kernel计算中,kernel计算的数据依赖于memcp中的数据,那么这时这2个操作是无法overlap的。程序计时
2025-06-12 17:31:59
173
原创 pytorch中的函数参数dim详解
对于刚入门的新手来说,Torch API中的维度真的很迷惑人.例如 torch.sum(x, dim=0) 是按着行相加呢,还是列相加?还有TopK,softmax等函数。
2025-06-04 11:18:12
232
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅