本次主要学习Ascend C算子。Ascend C算子采用标准C++语法和一组类库API进行编程,方便根据自己的需求选择合适的API开发自定义算子
其运用再 Ascend 处理器使用, Ascend 处理器用的是SoC+达芬奇架构(为矩阵加速设计) Arm架构cpu 。
理论知识
CANN是用于算子开发的框架。对于算子,可以理解为各类抽象的映射、net 中的层等,根据需求实现相应运算。比如有 relu,sigmoid,conv 等
Ascend C 算子编程语言是专门为 CANN 开发的,可以根据直接的需要编写算子,提高性能,完成更多需求。
SPMD 模型,多kernel并行 LocalTensor and GlobalTensor
算子在kernel侧实现
对于 Ascend C 的计算范式,以最简单的矢量计算为例,可以分为 copyin``compute``copyout.
通过que实现任务间的通信与同步,阻塞Deque来实现有序的传值
算子在host侧实现
张量的切分 Tiling 由于内存限制,将数据分块逐步搬到Local Memory 避免动态分配内存 还要注意 data type的转换
算子调用方式
快速调用
基于工程的调用
◦ aclnnxxx ◦ aclopExecuteV2 ◦ pytorch adapter 等
矩阵编程
分形格式 NZ格式,对最低2 dimensions, pad reshape transpose 单个cube一次只能算16*16 连续写和非连续写模式 切分后的尾块 settail()
优化
数据在机器内部的传输是性能瓶颈
Scalar优化; 0级API指令效率最高; 层次访存优化。
实验
本次实验主要基于 Orange Pi AIpro 进行实践。
首先将 OrangePi 与电脑通过 SSH 进行连接。实践分为两部分,包括 Kernel 直调工程体验和 AclNN 调用体验。最终根据学习的内容考取相关微认证。
直调工程体验
将 add 算子转化为 sinh 算子,并基于基础 API 实现。
核心代码:
主要根据 API 的 Doc 实现,并关注Ascend C算子的整体结构。
并比较算子实现的 sinh 和标准的 sinh 来验证算子的正确性。
AclNN 工程体验
需要同时在 host 侧和 kernel 侧进行修改。
根据 Example 中的程序进行修改。
需要注意各类参数、数据类型的设置和实现。
最终效果: 
成果
通过实验和课程对于 Ascend C 以及 CANN 有了一定的了解与认识,对于神经网络等技术在更底层的实现、优化、加速有所了解。
本次主要学习Ascend C算子。Ascend C算子采用标准C++语法和一组类库API进行编程,方便根据自己的需求选择合适的API开发自定义算子
其运用再 Ascend 处理器使用, Ascend 处理器用的是SoC+达芬奇架构(为矩阵加速设计) Arm架构cpu 。
理论知识
CANN是用于算子开发的框架。对于算子,可以理解为各类抽象的映射、net 中的层等,根据需求实现相应运算。比如有 relu,sigmoid,conv 等
Ascend C 算子编程语言是专门为 CANN 开发的,可以根据直接的需要编写算子,提高性能,完成更多需求。
SPMD 模型,多kernel并行 LocalTensor and GlobalTensor
算子在kernel侧实现
对于 Ascend C 的计算范式,以最简单的矢量计算为例,可以分为
copyin``compute``copyout.通过que实现任务间的通信与同步,阻塞Deque来实现有序的传值
算子在host侧实现
张量的切分 Tiling 由于内存限制,将数据分块逐步搬到Local Memory 避免动态分配内存 还要注意 data type的转换
算子调用方式
快速调用
基于工程的调用
◦ aclnnxxx ◦ aclopExecuteV2 ◦ pytorch adapter 等
矩阵编程
分形格式 NZ格式,对最低2 dimensions, pad reshape transpose 单个cube一次只能算16*16 连续写和非连续写模式 切分后的尾块 settail()
优化
数据在机器内部的传输是性能瓶颈
Scalar优化; 0级API指令效率最高; 层次访存优化。
实验
本次实验主要基于 Orange Pi AIpro 进行实践。
首先将 OrangePi 与电脑通过 SSH 进行连接。实践分为两部分,包括 Kernel 直调工程体验和 AclNN 调用体验。最终根据学习的内容考取相关微认证。
直调工程体验
将
add算子转化为sinh算子,并基于基础 API 实现。核心代码:
主要根据 API 的 Doc 实现,并关注Ascend C算子的整体结构。
并比较算子实现的
sinh和标准的sinh来验证算子的正确性。AclNN 工程体验
需要同时在 host 侧和 kernel 侧进行修改。
根据 Example 中的程序进行修改。
需要注意各类参数、数据类型的设置和实现。
最终效果:
成果
通过实验和课程对于 Ascend C 以及 CANN 有了一定的了解与认识,对于神经网络等技术在更底层的实现、优化、加速有所了解。