# CANNKit-SampleCode-AddCustom-cpp
**Repository Path**: harmonyos_samples/cannkit_samplecode_add_custom_cpp
## Basic Information
- **Project Name**: CANNKit-SampleCode-AddCustom-cpp
- **Description**: 本示例通过Ascend C编程语言实现了AddCustom算子,并按照不同的算子调用方式分别给出了对应的端到端实现。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-26
- **Last Updated**: 2025-12-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## AddCustom自定义算子样例说明
本样例通过Ascend C编程语言实现了AddCustom算子,并按照不同的算子调用方式分别给出了对应的端到端实现。
在开发者自研自定义算子AddCustom在端侧NPU上部署场景,可以使用本样例的AddCutom算子实现两个向量的加法计算。
如需扩展功能,请参考[《Ascend C算子开发》](https://developer.huawei.com/consumer/cn/doc/hiai-Guides/ascend-c-development-0000002119490598)。
- [FrameworkLaunch](./FrameworkLaunch):使用框架调用AddCustom自定义算子。
按照工程创建->算子实现->编译部署>算子调试>算子调用的流程完成算子开发。整个过程都依赖于算子工程:基于工程代码框架完成算子核函数的开发和Tiling实现,通过工程编译脚本完成算子的编译部署,继而实现单算子调用或第三方框架中的算子调用。
本样例中包含如下调用方式:
## 算子描述
AddCustom算子对应的数学表达式为:
$$
C = A + B
$$
$A$ 为计算输入
$B$ 为计算输入
$C$ 为计算输出
## 算子规格描述
| 向量 | 数据类型 | 数据格式 |
| :--- | :--- | :----- |
| A | fp16 | ND |
| B | fp16 | ND |
| C | fp16 | ND |
## 支持的产品型号
本样例支持如下产品型号:
- Mate 70 Pro
- Mate 70 Pro+
- Mate 70 Pro RS
- Mate X6
- MateBook Pro
- MateBook Fold
## 目录结构介绍
```
└── FrameworkLaunch //使用框架调用的方式调用AddCustom自定义算子工程。
```
## 环境安装
编译运行此样例前,请先完成开发运行环境部署。环境要求:
ubuntu版本(仅支持x86)>=22.0,3.7<=python版本<=3.10,gcc/g++版本>=7.0,cmake版本>=3.16.0。
环境安装推荐使用docker,执行如下命令即可一键获得满足开发要求的环境:
```bash
docker pull hub.xzt.me/ponylang/ponyc-ci-x86-64-unknown-linux-ubuntu22.04-builder:20230829
docker run -itd --net=host --privileged --name ascendc_ubuntu_python -v /home/:/data/ 07c3ea016a90 /bin/bash
docker exec -it -u root ascendc_ubuntu_python /bin/bash
pip install numpy torch onnx
apt-get update
apt-get install libtinfo5
```
其中/home/是docker外的本地目录,会映射到docker内的/data/目录
### 1. 下载工具包
下载DDK-tools包及对应平台插件包
- HarmonyOS 5.0及以上[工具包](https://gitee.com/link?target=https%3A%2F%2Fdeveloper.huawei.com%2Fconsumer%2Fcn%2Fdoc%2Fharmonyos-guides%2Fcannkit-preparations)
### 2. 解压
在linux开发环境将DDK-tools上解压到`${install_path}`,例如解压到"/home"目录,
将平台插件解压后拷贝到`${install_path}/ddk/tools/platform`下。拷贝后的目录结构如下。
```
tools
├── platform
│ ├── kirin9020
│ ├── kirinx90
```
注意:`不可以在windows平台解压`,会破坏压缩包中的软连接
### 2. 执行安装脚本进行安装:
```bash
source ${install_path}/tools/tools_ascendc/install.sh
```
例如软件包安装在/home目录时:
```bash
source /home/tools/tools_ascendc/install.sh
```
### 3. 设置环境变量:
新打开shell时需要重新设置环境变量,执行如下命令使公共环境变量生效:
```bash
source ${install_path}/tools/tools_ascendc/set_ascendc_env.sh
```
例如软件包安装在/home目录时:
```bash
source /home/tools/tools_ascendc/set_ascendc_env.sh
```
### 4. 下载json头文件(可选)
下载[json](https://github.com/nlohmann/json/releases/download/v3.11.3/include.zip),并将single_include下的文件夹解压到DDK中的tools/tools_ascendc/json-develop目录下,放置后的目录结构如下
```markdown
json-develop
`-- include
`-- nlohmann
|-- json.hpp
`-- json_fwd.hpp
```
## 编译运行样例算子
### 1. 准备:获取样例代码
可以使用以下两种方式下载,请选择其中一种进行源码准备。
- 命令行方式下载(下载时间较长,但步骤简单)。
```bash
# 开发环境,非root用户命令行中执行以下命令下载源码仓。git_clone_path为用户自己创建的某个目录。
cd ${git_clone_path}
git clone https://gitcode.com/HarmonyOS_Samples/cannkit_samplecode_add_custom_cpp.git
```
**注:如果需要切换到其它tag版本,以v0.5.0为例,可执行以下命令。**
```bash
git checkout v0.5.0
```
- 压缩包方式下载(下载时间较短,但步骤稍微复杂)。
**注:如果需要下载其它版本代码,请先请根据前置条件说明进行cannkit_samplecode_add_custom_cpp仓分支切换。**
```bash
# 1. cannkit_samplecode_add_custom_cpp仓右上角选择 【克隆/下载】 下拉框并选择 【下载ZIP】。
# 2. 将ZIP包上传到开发环境中的普通用户某个目录中,【例如:${git_clone_path}/cannkit_samplecode_add_custom_cpp-master.zip】。
# 3. 开发环境中,执行以下命令,解压zip包。
cd ${git_clone_path}
unzip cannkit_samplecode_add_custom_cpp-master.zip
```
### 2. 编译运行样例工程
- 若使用框架调用的方式,编译运行操作请参见[FrameworkLaunch](./FrameworkLaunch)。
## 更新说明
| 时间 | 更新事项 |
|------------|------|
| 2025/07/30 | 适配5.1.1.0版本tools |
| 2024/12/17 | 新版readme更新 |