TVM中的调度原语
TVM是用于有效内核构建的领域特定语言。
在本教程中,我们将向您展示如何通过TVM提供的各种原语调度计算。
from __future__ import absolute_import,print_function
import tvm
from tvm import te
import numpy as np
通常存在几种方法来计算相同的结果,但是,不同的方法将导致不同的位置和性能。因此TVM要求用户提供如何执行称为Schedule的计算。
A调度是一组计算的变换,其变换所述程序的计算循环。
# declare some variables for use later
n=te.var("n")
m=te.var("m")
可以从操作列表创建时间表,默认情况下,时间表以行优先顺序以串行方式计算张量。
# declare a matrix element-wise multiply
A=te.placeholder((m,n),name="A")
B=te.placeholder((m,n),name="B")
C=te.compute((m,n),lambda i,j: A[i,j]*B[i,j],name="C")
s=te.create_schedule([C.op])
#lower将把计算从定义转换为实数
#可调用函数。 使用参数`simple_mode = True`,它将返回一个可读的C like语句,我们在这里使用它来打印
#调度结果。
print(tvm.lower(s,[A,B,C],simple_mode=True))# declare a matrix element-wise multiply
A=t