已合并
feat: data_structure_for_hpc:课内实验1_基于不同存储结构的求和算子实现 #677
feat: data_structure_for_hpc:课内实验1_基于不同存储结构的求和算子实现 #677
已合并
圣地亚鸽创建于 24 天前
圣地亚鸽
圣地亚鸽
24 天前

课内实验1

描述

在“面向高性能计算的数据结构”课程第1章“绪论”中,新增课内实验1“基于不同存储结构的求和算子实现”
本实验面向“面向高性能计算的数据结构”课程中的线性表存储结构主题,要求使用 Ascend C 语言分别基于顺序存储和链式存储两种方式组织同一组序列数据,并开发对应的求和算子,对长度为 N 的数字序列完成累加求和。
实验中,顺序存储采用连续内存中的数组形式保存数据;链式存储使用数组保存元素值和后继索引,通过逻辑链接完成遍历。两种方式在逻辑上都表示同一条线性表,仅在物理存储布局和访存路径上存在差异。
通过对两种实现的正确性和运行时间进行对比,观察并分析:顺序存储由于数据连续,具有更好的空间局部性和更高的连续访存效率;链式存储由于结点分散、访问跳转频繁,会带来更大的访存开销。因此,在相同计算任务下,顺序存储版本的求和算子通常表现出更优的执行性能。。
运行脚本能够自动识别CANN安装路径和昇腾处理器型号,并根据当前实验环境完成工程配置、编译和运行。

关联的Issue

测试

·Notebook已在华为在线Notebook环境完整执行通过;
·CPU版本和NPU版本均能够正常编译和运行;
·已验证CANN 9.0.0、Ascend 910B4环境;
·已验证CANN 8.5.0、Ascend 910B3环境;
·Notebook能够生成完整的CPU和NPU工程代码。

文档更新

·新增
·contrib/tutorials/data_structure_for hpc/01_base/01_00_extra_ascendc_sum_op_various_storage_struct.ipynb
·更新:
·contrib/tutorials/data_structure_for_hpc/README.md

类型标签

  • [x ] 其他,请描述:
    新增实验

其他信息

课外实验1

描述

在“面向高性能计算的数据结构”课程第1章“绪论”中,新增课外实验“面向ReLU算子的多核并行与流水线实现”
ReLU是深度学习模型中常用的逐元素激活函数,其计算关系简单,但能够清晰体现一维连续数据在异构计算设备上的组织方式、片上搬运过程和向量化计算方式。本实验围绕 ReLU向量算子展开,在Ascend C环境中采用静态Tensor编程方式实现ReLU算子。实验以Host侧CPU参考结果作为校验基准,在Device侧将输入向量按tile划分,从Global Memory搬入UB中的LocalTensor,调用Maxs向量接口完成y=max(x,0)的逐元素计算,并将结果写回Global Memory。通过本任务,能够理解简单逐元素算子在NPU上的基本执行流程,并能够从正确性、误差和性能三个方面分析实验结果。
运行脚本能够自动识别CANN安装路径和昇腾处理器型号,并根据当前实验环境完成工程配置、编译和运行。

关联的Issue

测试

·Notebook已在华为在线Notebook环境完整执行通过;
·CPU版本和NPU版本均能够正常编译和运行;
·已验证CANN 9.0.0、Ascend 910B4环境;
·已验证CANN 8.5.0、Ascend 910B3环境;
·Notebook能够生成完整的CPU和NPU工程代码。

文档更新

·新增
·contrib/tutorials/data_structure_for hpc/01_base/01_01_extra_ascendc_static_tensor_relu_vector.ipynb
·更新:
·contrib/tutorials/data_structure_for_hpc/README.md

类型标签

  • [x ] 其他,请描述:
    新增实验

其他信息

课内实验4

描述

在“面向高性能计算的数据结构”课程第4章“算子开发与性能评价”中,新增课内实验4“基于 CANN的Softmax 算子优化”
Softmax是深度学习中常见的归一化算子,常用于分类模型输出层。本实验要求使用Ascend C语言完成一个Softmax自定义算子的实现,并基于统一工程对算子进行正确性验证和基础性能测试。本实验以二维张量最后一维上的Softmax计算为对象,要求在CANN环境下完成Host侧数据准备、Device侧算子实现、结果验证和性能统计。实验中输入张量采用float类型,按行执行Softmax计算,并通过多组输入规模观察算子的运行表现。通过本实验,应理解Softmax的计算特征、Ascend C自定义算子的基本开发流程,以及归约类算子与逐元素算子在实现方式上的差异。
运行脚本能够自动识别CANN安装路径和昇腾处理器型号,并根据当前实验环境完成工程配置、编译和运行。

关联的Issue

测试

·Notebook已在华为在线Notebook环境完整执行通过;
·CPU版本和NPU版本均能够正常编译和运行;
·已验证CANN 9.0.0、Ascend 910B4环境;
·已验证CANN 8.5.0、Ascend 910B3环境;
·Notebook能够生成完整的CPU和NPU工程代码。

文档更新

·新增
·contrib/tutorials/data_structure_for hpc/04_operator_development/04_00_extra_ascendc_cann_softmax.ipynb.ipynb
·更新:
·contrib/tutorials/data_structure_for_hpc/README.md

类型标签

  • [x ] 其他,请描述:
    新增实验

其他信息

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 圣地亚鸽 的贡献)
圣地亚鸽圣地亚鸽
24 天前 创建了 pull request,commit 063a2ba1
atomgit-bot
atomgit-bot
24 天前 评论:

变更摘要

此 PR 为「面向高性能计算的数据结构」课程新增两个课内实验 Notebook。实验一围绕顺序存储与链式存储两种结构,在 Ascend C 环境中分别实现求和算子(sequence_sumlinked_sum),并通过 NPU 侧性能对比观察数据布局对访存效率的影响。实验二实现了基于静态 Tensor 的 ReLU 向量算子,涵盖分块策略、多核任务划分、片上数据搬运与向量计算。两个实验均包含完整的 Host/Device 代码生成、CMake 构建配置、Shell 运行与 Profiling 脚本。

主要改动

  • 新增求和算子实验 Notebook:新增 01_00_extra_ascendc_sum_op_various_storage_struct.ipynb,在 Ascend C 中实现 sequence_sum(顺序存储)和 linked_sum(链式存储)两个 kernel,Host 侧通过 SumConfig/SumMetrics/StorageInput 管理实验参数与结果统计,并支持 shuffle_nodes 控制链表结点物理打乱,以对比两种存储结构的访存性能差异。
  • 新增 ReLU 向量算子实验 Notebook:新增 01_01_extra_ascendc_static_tensor_relu_vector.ipynb.ipynb,实现基于静态 Tensor 的 relu_static_tensor kernel,通过 GetTileRange 进行多核任务划分,使用 LocalMemAllocator<UB> 分配片上空间,循环调用 DataCopy/Maxs/PipeBarrier 完成分块搬运、ReLU 计算与写回。
  • 新增构建与运行基础设施:两个实验均通过 %%writefile 动态生成各自的 CMakeLists.txt(区分 CPU 演示目标与 Ascend NPU 目标)以及 run.sh/profile.sh 脚本,支持自动识别 CANN 安装路径与昇腾处理器型号,并包含 BUILD_ASCEND 条件编译选项控制 Ascend C 实机构建。
likedislike
atomgit-bot
atomgit-bot
24 天前 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
24 天前 添加了label:cann-cla/no
CANN-robot
CANN-robot成员
24 天前 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/cann-learning-hub zutao, waimaidaole (2/2) zutao, waimaidaole (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

qq_61043250, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了68条消息 查看更多
meme成员
5 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
5 天前 添加了label:approved
wanzutao
wanzutao成员
5 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
5 天前 添加了label:lgtm
CANN-robotCANN-robot成员
5 天前 合入了pull request