---
title: 用例整体介绍与运行
description: "该用例整体分为五个部分：aclnn算子部分、ATB算子部分、model部分、基础设施部分、主函数部分。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_0051.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_0051.html
indexId: f51f7cecb733cebeb0f75d628db1e1a8806987f8bf71936702bfd088be0d2fa461
---
# 用例整体介绍与运行

#### 整体介绍

该用例整体分为五个部分：aclnn算子部分、ATB算子部分、model部分、基础设施部分、主函数部分。

- aclnn算子部分：实现了aclnn算子对ATB的接入。
- ATB算子部分：使用ATB原生算子构建了一个ATB图算子。
- model部分：主要使用了ATB算子部分与aclnn算子部分生成的算子构建了一个更大的图算子，并且包含ATB图算子相关的调用逻辑。
- 基础设施部分：主要包含日志与内存池，用于辅助问题定位及加快显存分配速度。
- 主函数部分：承载着程序入口的功能，同时多线程功能也在主函数中实现。


#### 目录结构介绍

```
atb-aclnn 示例工程
|-- CMakeLists.txt
|-- README.md
|-- aclnn  --aclnn算子部分
|   |-- aclnn_gelu_operation.cpp
|   |-- aclnn_gelu_operation.h  --aclnn Gelu算子接入ATB的功能实现
|   |-- aclnn_operation_base.cpp
|   |-- aclnn_operation_base.h  --aclnn算子接入ATB的功能基类
|-- atb --atb算子部分
|   |-- atb_graph_op.cpp
|   |-- atb_graph_op.h
|-- build.sh  --工程编译脚本
|-- main.cpp  --主函数，即入口函数
|-- memory  --基础设施中的内存池部分
|   |-- memory_env.h
|   |-- memory_utils.cpp
|   |-- memory_utils.h
|   |-- memorypool.cpp
|   |-- memorypool.h
|-- model  --模型部分，包含ATB组图及ATB图算子调用相关逻辑
|   |-- model.cpp
|   |-- model.h
|-- utils --基础设施中的日志等部分
|    |-- log.cpp
|    |-- log.h
|    |-- utils.cpp
|    |-- utils.h
```


#### 用例运行

1. 进入到atb-aclnn目录下。

```
cd  ${用例所在目录}/atb-aclnn
```


2. 设置CANN环境变量（如source /usr/local/Ascend/ascend-toolkit/set_env.sh）。

```
source ${toolkit安装目录}/set_env.sh
```


3. 设置ATB环境变量（如source /usr/local/Ascend/nnal/atb/set_env.sh）。

```
source ${nnal安装目录}/atb/set_env.sh
```


4. 执行build.sh脚本。

```
bash ./build.sh
```


5. 执行用例。

```
./build/test_model
```


- 当前用例根据物理机上的device卡数创建线程，若需要调整线程个数，请自行修改  main.cpp
中的线程创建个数。
- 保证demo的ABI版本与ATB一致。

  - ATB的abi版本的查看方法：通过如下命令查看。

```
env | grep ATB_HOME_PATH
```


  - demo的ABI版本查看方法：通过查看    CMakeList
中的如下命令来查看ABI版本为0或1，OFF表示0，ON表示1。

```
option(USE_CXX11_ABI "USE_CXX11_ABI" OFF)
```
