在本教程中,我们将注意力转向TVM如何与Tensor Expressions(TE)一起使用,以创建一个空间来搜索性能配置。TE用纯函数语言描述张量计算(也就是说,每个表达式都没有副作用)。从整个TVM的角度来看,Relay将计算描述为一组运算符,并且这些运算符中的每一个都可以表示为一个TE表达式,其中每个TE表达式都采用输入张量并产生输出张量。重要的是要注意,张量不一定是完全物化的数组,而是表示计算的形式。如果要从TE生成计算,则需要使用TVM的调度功能。
这是TVM中Tensor表达语言的入门教程。TVM使用特定于域的张量表达式来进行有效的内核构建。我们将通过使用张量表达语言的两个示例来演示基本工作流程。第一个示例介绍了TE和带有矢量加法的调度。第二部分通过逐步优化TE的矩阵乘法来扩展这些概念。此矩阵乘法示例将作为将来涵盖TVM更高级功能的教程的比较基础。
示例1:在TE for CPU中编写和计划向量加法
让我们看一下Python中的示例,在该示例中,我们将实现TE用于矢量加法,然后执行针对CPU的调度。我们首先初始化TVM环境。
import tvm
import tvm.testing
from tvm import te
import numpy as np
#如果可以确定要定位的CPU并指定它,将会获得更好的性能,如果您使用的是llvm,
# 则可以从命令``llc --version``获取CPU类型,
# 您可以检查``/ proc / cpuinfo``用于您的处理器可能的其他扩展支持。
# 例如,``tgt =“ llvm -mcpu =`skylake`
tgt=tvm.target.Tar