当前位置: 首页 > 工具软件 > nassh-relay > 使用案例 >

tvm.relay学习(三)——relay变量

邢勇
2023-12-01

        受LLVM的启发,Relay在抽象语法树和文本格式中显式的区分全局变量和局部变量。在文本格式中,全局变量和局部变量通过前缀和sigils来区分。全局变量以@为前缀,局部变量以%为前缀。这种显式的区分使得某些优化很容易被实施。例如,内联全局定义无需进行分析:只需替换定义即可。

全局变量:

        全局标志符以@标志前缀来区分,例如“@global”。全局标识符始终引用包含在全局可见环境(称为模块)中的全局可见定义。 全局标识符必须唯一。在https://docs.tvm.ai/api/python/relay/expr.html#tvm.relay.expr.GlobalVar中可以查看其定义和文档。

局部变量:

        局部标志符以%标志前缀来区分,例如“%local”。局部标识符始终引用函数参数或在let表达式中绑定的变量,并且将范围分别限制为出现它的函数或它绑定的let表达式。

        在下面的代码段中,请注意%a定义了两次。 与大多数功能语言一样,这是允许的; 在第二个let表达式的范围中,名称%a被“阴影化”,这意味着内部范围中对%a的所有引用均引用后面的定义,而外部范围中对%a的引用继续引用第一个定义 。

let %a = 1;
let %b = 2 * %a;  // %b = 2
let %a = %a + %a; // %a = 2. %a is shadowed
%a + %b           // has value 2 + 2 = 4

       在https://docs.tvm.ai/api/python/relay/expr.html#tvm.relay.expr.Var中可以查看其定义和文档。

 类似资料: