# TOPI 简介

TOPI 是 TVM 的算子集合库，旨在共享构建和优化由 TVM 生成的内核的工作。目标：

- 为算子声明提供语法糖
- 为融合算子的创建提供常用原语。
- 在每个架构下提供常用的调度方案。

## TOPI 指南

- 对于已知的算子，使用 numpy 风格的命名约定。
- 尽可能将算子声明与调度分开。
  - 这可能会带来不便，但可以跨算子实现更一般的调度。
  - 总是可以通过遍历树来从其输出中恢复张量。
- Deliberately 断言要求
  - 某些内核对形状和数据布局有要求，请确保它们得到满足。
- 如果参数或函数中未指定数据布局，则默认为 NCHW。


## 性能调优工作流程

由于 TVM 仍在开发中，某些优化可能不完美。一种快速有效的方法是进行代码生成加上手动修改。工作流程如下：

- 生成 GPU 内核，将它们写入文件，例如 ```perf/matexp_generated.cu```
- 将生成的文件复制到另一个文件中，例如 ```perf/matexp_manual.cu```，根据直觉进行修改。
- 在脚本中设置 use_manual 标志以继续正常的代码生成工作流，但附带手动编写的代码。
- 观察性能差异。
- 如果性能有所改善，标记手动编写的代码并考虑进行优化传递以生成所需的目标代码。
