【TVM 教程】TVM 中的 Schedule 原语
原文中文,约13800字,阅读约需33分钟。
📝
内容提要
本教程介绍了 TVM 中的调度原语,指导用户高效构建内核。通过一系列操作描述计算,使用调度原语进行计算调度,编译并运行以观察性能差异,最后根据结果调整调度策略。
🎯
关键要点
-
TVM 是一种用于高效构建内核的领域特定语言。
-
Schedule 是一组计算转换,用于转换程序中的循环计算。
-
通过 Schedule,用户可以灵活地调度计算以提高性能。
-
可以通过多种方法创建 Schedule,包括 split、tile、fuse、reorder、bind 等。
-
使用 compute_at 可以将计算移动到特定的 axis 中,以优化性能。
-
compute_inline 和 compute_root 可以将计算体插入到需要张量的地址或移动到 root。
-
本教程提供了通过一系列操作描述计算、调度计算、编译和运行的工作流程。
❓
延伸问答
什么是 TVM 中的 Schedule 原语?
Schedule 原语是一组计算转换,用于在 TVM 中调度程序中的循环计算,以提高性能。
如何使用 TVM 创建 Schedule?
可以通过多种方法创建 Schedule,包括 split、tile、fuse、reorder 和 bind 等操作。
Schedule 中的 split 操作有什么作用?
split 操作可以根据 factor 将指定的 axis 拆分为两个 axis,以便更灵活地调度计算。
TVM 中如何优化计算性能?
通过使用 Schedule 原语调度计算、编译并运行程序,观察性能差异后调整调度策略,可以优化计算性能。
compute_at 和 compute_inline 的区别是什么?
compute_at 将计算移动到特定的 axis 中,而 compute_inline 则将计算体插入到需要张量的地址中。
如何在 TVM 中使用 bind 操作?
bind 操作可以将指定的 axis 与线程 axis 绑定,常用于 GPU 编程,以提高并行计算效率。
🏷️