训练系统与性能进阶计算演示
本页章节
EXACT MECHANICS / STORAGE & STRIDES
张量布局:形状背后的内存地址
shape 描述逻辑坐标,stride 与 offset 决定怎样访问底层存储。转置、切片、展平和复制分别改变什么,可以用十二个数逐项核对。
01 / ADDRESSING
从二维坐标算出存储位置
十二个数的逻辑视图
固定存储 [0…11] · 原形状 3×4每次切换都从原始值重新演算。写入开关用于检查共享关系,不会修改其他示例或文件。
Shape
Stride
Offset
与原存储共享:;能否无拷贝展平:
原始底层存储
当前逻辑矩阵
| 逻辑坐标 | 相对偏移 | 存储位置 | 值 |
|---|
02 / VIEW OR COPY
相同形状,未必具有相同的步长和共享关系
| 操作 | 通常发生什么 | 需要检查 |
|---|---|---|
| Transpose / 基本切片 | 可修改 shape、stride、offset,仍共享原存储。 | 逻辑顺序与物理顺序是否一致;写入是否影响其他别名。 |
| View | 按兼容的尺寸与步长重新解释存储。 | 跨合并轴的 stride 关系;不满足时不能无拷贝形成所需形状。 |
| Reshape | 可返回视图,也可能创建副本。 | 不要依赖它一定共享或一定复制,按框架语义确认。 |
| Contiguous | 已符合目标布局时可直接返回;否则按逻辑顺序复制。 | 目标 memory format 和别名关系。本面板的复制开关总是产生独立存储。 |
“非连续”不自动等于“不能 view”。本例每隔一列取值时,逻辑访问地址为 0,2,4,6,8,10,展平后可用 stride=2 表示。转置的逻辑顺序为 0,4,8,1,…,通常无法用一维固定 stride 表示,需要复制才能按该顺序展平。
本例列出了完整地址序列,能直接判断一维视图是否成立。更高维、单元素维、零元素维、广播 stride=0 和其他 memory format,需要按具体算子的规则处理。
03 / ENGINEERING
布局怎样进入性能与正确性问题?
隐藏复制与临时内存
后续 kernel 若要求特定布局,可能先产生连续副本。记录 shape、stride、存储共享和 profiler 中的 copy/contiguous,判断临时峰值与带宽开销。
原地写入与自动微分
共享视图上的写入可能改变反传需要的值。框架的版本计数可以发现部分不合法修改;仍应避免无意修改保存激活。
广播与重复值
广播视图可用零步长让多个逻辑位置引用同一个元素。反向需沿广播轴归约,原地写入重叠位置则需要特殊限制。
Kernel 支持与实际速度
有些算子能直接接受步长,有些布局更利于合并访问。通过地址核对解释数据组织,再用实际测量判断性能。
适用范围与一手资料
四种固定二维视图,正步长与元素单位地址。复制选项总是建立独立存储;一维 view 判断只针对展示的地址序列,不实现通用框架 reshape。
公式与机制的原始依据 · 2 项
- PyTorch · Tensor Views共享存储、stride、transpose、reshape、contiguous 的语义
- PyTorch · Autograd mechanics计算图、保存中间值与自动微分规则