我们仅需要定义数个循环变量以及运算的描述:
Var i,j;
RDom k(0,c);
func(i,j) += A(i,k)*B(k,j)
比起之前的 c 实现简洁了不少,循环被隐藏在对 func 的定义中...我们来定义一个绘制渐变色图片的例子:
// 函数可以看作是从输入坐标到像素值的映射
Func gradient;
// 变量可以被看作是函数的参数,也可以参与函数运算
Var x, y;
// 表达式对象定义了运算的过程...它会被应用在输出的每一个像素上,得到最终的结构,如下图所示:
对于更复杂的算法,可能存在复数个函数,比如下面的例子:
Var x,y;
Func producer, consumer;
// 定义第一个函数...分块本身可以使用 reorder 实现:
Var x_outer,y_outer,x_inner,y_inner;
gradient.split(x, x_outer, x_inner, 4)...:
Var x_outer,y_outer,x_inner,y_inner;
gradient.tile(x, y, x_outer, y_outer, x_inner, y_inner, 4, 4);