Ascend C 暑期优才班——上海站 算子学习笔记
收藏回复举报
Ascend C 暑期优才班——上海站 算子学习笔记
新人帖
发表于2024-07-17 17:04:06
0 查看

MindSpore

AI框架 , 类似于PyTorch,Tensorflow

香橙派orangepi

TF卡下载镜像插入机器中 pip show mindspore展示版本

CANN

异构计算框架 类似于CUDA

算子

网络节点的计算逻辑 对函数进行某一项操作 例如tanh,ReLU,Sigmoid

类型

进行算子实现的匹配,相同类型的实现逻辑相同

名称

某个算子,同一网络中名称唯一

容器

张量Tensor 存储输入输出
TensorDesc对容器的描述

名称

形状

数据类型

(i1,i2,...)

数据排布格式

NHWC,逆向进行遍历

属性

轴:张量中维度的下标

Host侧

CPU,硬盘

Device侧

GlobalMem,AIcore中的localMem

核函数

入口
__global__ __aicore__ void kernel_name(argument lists)
变量类型限定符:__gm__ 指针变量入参统一定义 __gm__ unit8_t*GM_ADDR

调用

NPU中 kernel_name <<< blockDim,12ctrl,stream>>>(argument list);

  1. blockDim 所用核的数量
  2. 12ctrl 是保留参数,默认写nullptr
  3. stream 任务队列

AI Core

  • 计算单元
    • Cube(矩阵)计算单元
    • Vector(向量)计算单元
    • Scalar(标量)计算单元
  • 存储单元
  • 控制单元

    SPMD

    通过GetBlockIdx获取ID 多个核共享指令,只有block_idx不同,拆分数据

    API

    基础API

  • + 整个tensor计算
  • add(dst,sr1,sr2,n)计算前n位
  • tensor高维切分计算

    高阶API

    例如矩阵运算中

    编程范式

    基本矢量编程范式:
  • copyin (global到local,EnQue到VECIN中)
  • compute (从VECIN中DeQue)
  • copyout
    流水任务:待处理数据分片,并行运算
    队列可以分块,已达成并行 ## host侧算子实现 tiling实现 计算切分相关参数
    shape推导,根据输入推测出算子的输出张量描述
    算子原型注册,进行算子原型定义

我要发帖子