Articles
68
Tags
12
Categories
0
回到首页
文章归档
学习笔记
关于本人
我的朋友
Yuanzhong Chen's Blog
手写一个小小的深度学习项目这一块
Back to Home
回到首页
文章归档
学习笔记
关于本人
我的朋友
手写一个小小的深度学习项目这一块
Created
2026-06-14
|
Updated
2026-06-15
|
Post Views:
Author:
Adam Chen
Link:
https://517adam.github.io/blog/2026/06/14/%E6%89%8B%E5%86%99%E4%B8%80%E4%B8%AA%E5%B0%8F%E5%B0%8F%E7%9A%84%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E9%A1%B9%E7%9B%AE%E8%BF%99%E4%B8%80%E5%9D%97/
Copyright Notice:
All articles on this blog are licensed under
CC BY-NC-SA 3.0 CN
unless otherwise stated.
Previous
逐元素操作算子
Element-wise 算子优化一、核心特性1. 数据并行对于 element-wise 算子,输出位置的值只取决于对应位置的输入,不涉及其他位置。因此线程之间不需要交换数据 / 同步指令,也没有额外的寻址开销,具备优秀的数据并行性。这是 GPU 优化中最容易打到理论峰值带宽的一类算子。 为什么向量加法天然适合 GPU:每个元素的「读 → 算 → 写」彼此独立,互不依赖,所以成千上万份操作可以同时重叠进行,把显存带宽和运算单元一起喂饱。 2. 极低的计算访存比(最重要的性能特征)这是 element-wise 算子最关键的性能特征,决定了所有优化策略。 GPU 上执行一条算术指令只需要几个时钟周期,而访问全局显存的耗时却高达几百个时钟周期。两者差距悬殊。 以加法 $C[i] = A[i] + B[i]$ 为例: 计算量:只有 1 次加法 访存量:读 A、读 B、写 C,共 3 次显存操作 = 3 × 4 Byte = 12 Byte 计算访存比 = 1 FLOP / 12 Byte ≈ 0.083 FLOP...
Next
CUDA全局坐标计算
1int i = blockIdx.x * blockDim.x + thredIdx.x CUDA 为每一个线程提供了四个内置变量,用于定位自己在整个任务中的位置: 量 含义 维度范围 threadIdx.x/y/z 线程在块内的局部索引 日 blockDim-1 blockIdx.x/y/z 线程块在网格内的索引 日 gridDim-1 blockDim.x/y/z 每个块每维的线程数 由启动参数 决定 $<<\ldots,\quad{\mathrm{t h r e a d s}}>>>$ gridDim.x/y/z 网格每维的块数 由启动参数 << 所谓全局索引,就是跳过前面所有块的线程,再加上当前块内的偏移。 全局坐标计算方式在内存中,数据始终按照一维排布,因此全局坐标计算就是将多维逻辑索引映射为一维物理地址 一维坐标计算1int global_id = blockIdx.x * blockDim.x + threadI...
Adam Chen
Articles
68
Tags
12
Categories
0
Follow Me
Announcement
我喜欢你
Recent Posts
每天应该做些啥
2026-07-07
各种各样的JEPA
2026-06-21
规约reduce算法
2026-06-21
oneflow element-wise代码解析
2026-06-20
2026-6-18
2026-06-18