| refactor: Reg 数据搬运指南「按索引取数」改用 Arange 生成索引做逐 lane Gather Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !305 merge humanize/reg-data-movement-guide into master refactor: Reg 数据搬运指南「按索引取数」改用 Arange 生成索引做逐 lane Gather Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 将「Reg 数据搬运场景选型指南」中 scene7「按索引取数」示例从 DIST_E2B_B32(E2B 块广播)改为用 Arange 在寄存器内直接生成索引、由 Gather 逐 lane 离散收集。 旧实现 LoadAlign<uint32_t, DIST_E2B_B32> 把紧排 uint32 索引广播成「每索引一个 32B 块」,单轮仅消费前 8 个索引、块内 8 lane 重复同一索引值(out[8k..8k+7]=data[idx[k]]),输出是块重复而非逐 lane 离散收集,与「按索引取数」小节意图相悖、易误导读者,且需额外的 UB 索引缓冲与 E2B 展开。 新实现用 Arange<int32_t, DECREASE_ORDER> 在寄存器内直接生成倒序索引 idx[i]=63-i,Gather 逐 lane 寻址 out[i]=data[63-i],得到 data 的真正逆序拷贝(64 lane 各取各、互不重复),免去 UB 索引与 E2B 展开。 主要改动: - **src**:scene7_gather_e2b.asc → scene7_gather_arange.asc,删除 idx 的 UB 缓冲/DataCopy/E2B,改用 Arange 生成索引;host 侧校验改为逐 lane out[i]==63-i。(注:Arange 不支持 uint32,需把 RegTensor<uint32_t> 引用强转为 RegTensor<int32_t> 调用) - **文档**:更新「非连续存取」章节标题与正文(去掉 E2B 描述)、按索引取数小节说明、实测输出与误区表(移除「按 64 索引规划单轮 E2B+Gather」一条),并做若干文字润色。 - **图**:更新 sel-decision-tree.svg、sel-gather.svg(Gather 改为逐 lane 取数示意)。 - **构建**:CMakeLists.txt 场景目标名 scene7_gather_e2b → scene7_gather_arange。 ## 关联的Issue - #205 ## 测试 scene7_gather_arange 示例 host 侧做逐元素校验:out[i] 应等于 data[63-i]=63-i,全部命中则打印 PASSED。 ## 文档更新 更新 Reg数据搬运场景选型指南.md 及 images/ 下两张 SVG 配图。 ## 类型标签 - [x] 文档更新 - [x] 其他,请描述:示例代码重构(scene7 改用 Arange 逐 lane Gather) See merge request: cann/cann-samples!305 | 7 天前 |