---
title: 简介
description: "算子编译工具（op_compiler）是昇腾CANN提供的编译算子生成算子二进制文件的命令行工具。该工具的具体功能和使用约束如下："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/opcompiletool
sourcePath: /source/zh/canncommercial/900/devaids/opcompiletool/atlasop_compiler_07_0001.html
indexId: d31f9c1d2f359d2281ef59982b192d1ccf2a91d33f0a1524058387ec6aa07db981
---
# 简介

算子编译工具（op_compiler）是昇腾CANN提供的编译算子生成算子二进制文件的命令行工具。该工具的具体功能和使用约束如下：

具体功能：

- 静态shape编译功能：通过单算子API执行的方式调用算子，算子shape固定或者变化较少时，可以使用该工具编译静态Kernel包并安装，提升算子调用的性能；如果需要对算子调用进一步进行性能优化，可以开启调优模式。
  本文档仅介绍算子编译工具的使用方法，具体的场景样例请参见“使用静态Kernel提升算子执行性能(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/aolapi/operatorlist_00438.html)”章节。

- 调试版本编译功能。定位算子问题时，可以使用该工具编译调试版本的二进制，用于问题复现和定位。

使用约束：

- 静态shape编译

  - （默认）静态编译模式支持的产品型号：

    - Atlas 推理系列产品
    - Atlas 训练系列产品
    - Atlas A2 训练系列产品 / Atlas A2 推理系列产品
    - Atlas 350 加速卡
  - 调优模式相关的使用约束如下：

    - 产品型号支持度：

      - Atlas 推理系列产品，不支持
      - Atlas 训练系列产品，不支持
      - Atlas A2 训练系列产品 / Atlas A2 推理系列产品，支持
      - Atlas 350 加速卡，不支持
    - 不支持不同用户同时使用同一device进行调优。
    - 调优前，请确保关闭Profiling功能，避免影响调优结果。关闭Profiling功能具体操作请参见《性能调优工具(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/Profiling/atlasprofiling_16_0144.html)》。
- 调试版本编译
  支持的产品型号：
  - Atlas 推理系列产品，支持
  - Atlas 训练系列产品，支持
  - Atlas A2 训练系列产品 / Atlas A2 推理系列产品，支持
  - Atlas 350 加速卡，不支持


#### 工具功能架构

算子编译工具的功能架构如图1所示。

图1 算子编译工具功能架构

1. 开发者在执行此工具时，需要向此工具传入算子信息统计文件或者算子kernel_name（仅调试场景支持传入kernel_name）以及其他参数。
2. 传入算子信息统计文件的场景下，算子编译工具获取该文件并解析。
3. 判断开发者是否开启了调试版本编译选项：

  a. 如果开启，则进行调试版本编译，根据实际运行时使用的是静态shape还是动态shape编译出对应的调试版本。
  b. 如果没有开启，判断开发者是否开启了调优编译参数，未开启调优编译参数，执行默认的静态shape编译流程；开启调优编译参数，则执行调优编译流程。
4. 算子编译工具编译生成Kernel文件并打包成算子Kernel包。


#### 静态编译

静态编译是指在编译时指定shape大小，运行时不需要指定shape大小。算子编译工具进行静态编译时，根据输入的算子信息统计文件，得到确定的shape信息，针对每一个shape都编译出一个算子二进制，编译原理如下图所示：


静态编译有如下优势：

- 编译时决定所有tensor的大小，存储空间利用率高。
- 编译时可以针对实际的shape大小做针对性优化。
- AI处理器擅长并行指令运行，不擅长逻辑计算，如果有太多的Scalar操作可能会打断并行指令的运行，从而导致性能下降。静态编译可以在编译时完成标量的计算，一定程度上可以提升性能。
- 编译工具在编译时知道确切的操作数据大小，不会额外插入同步，不会导致并行执行多个指令变成串行执行，一定程度上可以提升性能。


#### 调优编译

如果想要进一步提升算子性能，可以使用算子编译工具的调优模式，尝试进行算子调优。


#### 调试版本编译

在算子二进制的使用过程中，如果出现AICore Error或者内存越界等问题，可以编译出包含相关调试信息的调试版本，用于分析和定位问题。
