---
title: CANN算子类型介绍
description: "首先看下CANN算子在AI处理器中的位置，如图1所示，其中：- AI Core是AI处理器的计算核心，负责执行矩阵、向量、标量计算密集的算子任务。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/tbeaicpudevg/atlasopdev_10_0005.html
sourcePath: /source/zh/canncommercial/900/others/tbeaicpudevg/atlasopdev_10_0005.html
indexId: 435ea4f3664d106d0ea106994b56c17e1bc0fe4f185014347df4813f0bce142373
---
# CANN算子类型介绍

首先看下CANN算子在AI处理器中的位置，如图1所示，其中：- AI Core是AI处理器的计算核心，负责执行矩阵、向量、标量计算密集的算子任务。
- AI CPU负责执行不适合跑在AI Core上的算子，是AI Core算子的补充，主要承担非矩阵类、逻辑比较复杂的分支密集型计算。


图1 CANN算子在AI处理器上的位置

由上面可以看出，CANN算子有两种类型，TBE算子与AI CPU算子。- TBE算子
运行在AI Core上，鉴于AI Core的强大算力，主要负责执行矩阵、向量、标量相关的计算密集型算子。
其中，TBE（Tensor Boost Engine）提供了基于张量虚拟机（Tensor Virtual Machine，TVM）框架的自定义算子开发能力，提供了用户开发自定义算子所需工具。TBE工具给用户提供了两种算子开发方式 ：DSL与TIK。开发者可以根据需求自由选择，两种开发方式的区别如下：

  - DSL（ Domain-Specific Language ，基于特性域语言）
    DSL接口已高度封装，用户仅需要使用DSL接口完成计算过程的表达，后续的算子调度、算子优化及编译都可通过已有的接口一键式完成，适合初级开发用户。

  - TIK（ Tensor Iterator Kernel， 张量嵌套内核）
    开发者可以通过调用TIK提供的API基于Python语言编写自定义算子，然后TIK编译器会将其编译为适配AI处理器应用程序的二进制文件。TIK需要用户手工控制数据搬运和计算流程，入门较高，但开发方式比较灵活，能够充分挖掘硬件能力，在性能上有一定的优势。

- AI CPU算子
运行在AI CPU上。以下几种场景下，可使用AI CPU方式实现自定义算子：

  - 不适合跑在AI Core上的算子，例如非矩阵类的复杂计算，逻辑比较复杂的分支密集型算子等。
    例如，Dump、profiling等控制算子，Queue、Stack等资源状态类算子，TopK、Where等检索类算子。

  - AI Core不支持的算子，算子需要某些数据类型，但AI Core不支持，例如Complex32、Complex64。
  - 某些场景下，为了快速打通网络在AI处理器的执行流程，在TBE实现自定义算子较为困难的情况下，可通过自定义AI CPU算子进行功能调测，提升调测效率。功能调通之后，后续性能调测过程中再将AI CPU自定义算子转换为TBE算子实现。


若存在相同算子类型的TBE算子与AI CPU算子，TBE算子的执行优先级高于AI CPU算子。
